[英]Strange behaviour with Fulltext search in SQL Server
我有帶有列消息NVARCHAR(MAX)的MyTable。
ID為1的記錄包含消息“ 0123456789333444測試”
當我運行以下查詢
DECLARE @Keyword NVARCHAR(100)
SET @Keyword = '0123456789000001*'
SELECT *
FROM MyTable
WHERE CONTAINS(Message, @Keyword)
記錄ID 1顯示在結果中,我認為不應,因為0123456789333444不包含0123456789000001。
有人可以解釋為什么仍然顯示記錄嗎?
編輯
select * from sys.dm_fts_parser('"0123456789333444 Test"',1033,0,0)
返回以下內容:
group_id phrase_id occurrence special_term display_term expansion_type source_term
1 0 1 Exact Match 0123456789333444 0 0123456789333444 Test
1 0 1 Exact Match nn0123456789333444 0 0123456789333444 Test
1 0 2 Exact Match test 0 0123456789333444 Test
這是因為@Keyword沒有用雙引號引起來。 強制零個,一個或多個匹配。
指定以指定文本開頭的單詞或短語的匹配項。 將前綴術語用雙引號(“”)括起來,並在結束引號之前添加星號( ),以便匹配所有以星號之前指定的簡單術語開頭的文本。 該子句的指定方式應為:CONTAINS(列,“文本 ”)。 星號匹配零個,一個或多個字符(詞根或短語中的一個或多個根詞)。 如果文本和星號沒有用雙引號引起來,則謂詞為CONTAINS(列,“文本*”),則全文搜索會將星號視為字符,並搜索與文本*的完全匹配項。 全文引擎將找不到帶星號(*)的單詞,因為分詞系統通常會忽略此類字符。
當是短語時,該短語中包含的每個單詞都被視為一個單獨的前綴。 因此,指定前綴術語“ local wine *”的查詢將與文本為“ local winery”,“ local wined and dined”等的任何行匹配。
看一下有關該主題的MSDN。 MSDN
您是否嘗試過查詢以下視圖以查看系統停止列表上的內容?
select * from sys.fulltext_system_stopwords where language_id = 1033;
找到了可行的解決方案。 我添加了language 1033
作為附加參數。
SELECT * FROM MyTable WHERE CONTAINS(Message, @Keyword, langauge 1033)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.