2010-09-29 34 views
3

我使用CONTAINSTABLE來搜索兩個表列。一旦搜索結果中包含像'''這樣的小字詞,即使它們實際存在於列中,搜索也不會返回結果。CONTAINSTABLE查詢不識別小字

快速示例。正在搜索的列包含文本。 「系統需要升級」

下面的SQL返回0行

SELECT  * FROM Incident WHERE (TicketNumber IN (
SELECT TicketNumber FROM   [Action] FT_TBL INNER JOIN 
CONTAINSTABLE(Action, Text, '"system" AND "needs" AND "to" AND "upgraded" AND NOT "Search Summary"') KEY_TBL ON FT_TBL.ID = KEY_TBL.[KEY] 
UNION 
SELECT TicketNumber FROM [Incident] FT_TBL INNER JOIN 
CONTAINSTABLE(Incident, Subject, '"system" AND "needs" AND "to" AND "upgraded"') AS KEY_TBL ON FT_TBL.TicketNumber = KEY_TBL.[KEY])) 

一旦「到」忽略它工作正常:

SELECT  * FROM Incident WHERE (TicketNumber IN (
SELECT TicketNumber FROM   [Action] FT_TBL INNER JOIN 
CONTAINSTABLE(Action, Text, '"system" AND "needs" AND "upgraded" AND NOT "Search Summary"') KEY_TBL ON FT_TBL.ID = KEY_TBL.[KEY] 
UNION 
SELECT TicketNumber FROM [Incident] FT_TBL INNER JOIN 
CONTAINSTABLE(Incident, Subject, '"system" AND "needs" AND "upgraded"') AS KEY_TBL ON FT_TBL.TicketNumber = KEY_TBL.[KEY])) 

如何CONTAINSTABLE與這些小詞連用,還是應該把它們全部放在一起?如果這些較小的單詞在搜索中實際上是有意義的,那麼它們又如何被納入搜索?

+0

什麼版本的SQL Server? – 2010-09-29 13:02:24

+0

https://technet.microsoft.com/zh-cn/library/ms187914(v=sql.110).aspx – Jodrell 2015-02-04 14:05:12

回答

1

這些不是「小字」,這些是在停止列表中的常用字。他們被忽略。

請參閱BOL上的Stopwords and Stoplists

+0

謝謝。我有一個暗示就是這樣,我在Google上搜索「CONTAINSTABLE禁止的詞」以及「被封鎖的詞」。謝謝(你的)信息。 – user48408 2010-09-29 16:38:06

1

請參閱the end of my answer關於創建和引人入勝的自定義全文Stoplist從空白開始。我檢查,並與空單查詢作品有 「爲」, 「是」, 「中」, 「對」 等

更新:

SQL Server 2005中應該有MSSQL \ FTData文件\ noiseENG.txt 。
我推薦查看答案question "Noise Words in Sql Server 2005 Full Text Search"

+0

在SSMS 2005中沒有「全文Stoplist」節點。它看起來像它在08年的新版本。無論如何,我們可能會升級到2008年,在這種情況下,我會試試這個。謝謝 – user48408 2010-09-30 15:38:00

+0

Plz看到我的更新 – 2010-09-30 15:55:09