SQL 全文檢索 搜尋準確度問題
目前工作上遇到使用全文搜尋後無法按照想要的結果出現
比如我對一個col使用contains( col , '"'一'"');
可能col內有很多有 一個 一切 一天 之類的文字
但是由於全文檢索的切割因此無法呈現,那怕是加上**也一樣
原因在於 全文檢索會先把你的字串切成某些字串組,因此搜尋速度加快,但是也導致搜尋無法像like一樣
如我用 select * from table where col like '%一%' 則可以找到一切、一個之類的文字串
而我想搜尋看看字串到底是如何切割的 因此使用
SELECT *
FROM sys.dm_fts_index_keywords
(DB_ID('DB_NAME'),OBJECT_ID('TABLE_NAME')
大致上出現這些選項,那可以得知 "一" 通常會被組成其他字串列。上面介紹到可以透過修改tscht.xml來達到改變字串切割的方法
不知道為何無法加入任何關鍵字,按照參考照做依舊無法找到園三結。
接著推測可能 第一個 會變切成 第一 和 個
因此可依照表中的 第一 找到關於第一的相關組成
可能之後用到這篇再來處理吧,現在感覺是還堪用,並且由於切成單字的不多,因此限定至少兩個字的搜尋(依靠全文檢索自動切?)
或者我想要使用
SELECT *
FROM sys.dm_fts_index_keywords
(DB_ID('DB_NAME'),OBJECT_ID('TABLE_NAME')
找出陣列之後一個一個去比對? 但是感覺效能會很差 可能再評估一下
參考
http://blog.sqlgrease.com/find-busiest-database-sys-dm_exec_query_stats/#:~:text=Adhoc%20SQL%20has%20its%20dbid%20set%20to%20NULL,As%20a%20result%20a%20dbid%20can%E2%80%99t%20be%20determined.
https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-fts-index-keywords-by-document-transact-sql?redirectedfrom=MSDN&view=sql-server-ver16
https://dotblogs.azurewebsites.net/ricochen/2014/05/10/145037
https://learn.microsoft.com/zh-tw/troubleshoot/sql/admin/improve-performance-full-text-queries
https://learn.microsoft.com/zh-tw/sql/relational-databases/search/improve-the-performance-of-full-text-indexes?view=sql-server-ver16
留言
張貼留言