2008-09-16 68 views
5

我們在項目中使用SQL Server 2005。系統的用戶可以使用「關鍵字」搜索某些對象。我們實現這一目標的方式是爲每個表中可能包含這些'關鍵字'的重要列創建一個全文目錄,然後使用CONTAINS搜索用戶在該索引中的搜索框中輸入的關鍵字。例如,假設你有電影對象,並且你想讓用戶在文章的標題和正文中搜索關鍵詞,那麼我們將索引標題和劇情欄目,然後這樣做:使SQL Server索引爲小數字

SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords) 

(它實際上比這更先進一點,但沒有什麼可怕的複雜)

有些用戶添加數字到他們的搜索,因此,例如,他們想找到「終結者2」 。這裏的問題是,據我所知,在默認情況下SQL Server將不會指數短線的話,這樣做這樣一個搜索:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator 2"') 

實際上就相當於這樣做:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator"') <-- notice the missing '2' 

,我們正在獲得大量的虛假結果。

有沒有辦法來強制SQL Server索引小的話嗎?優選的是,我寧願只索引數字像1,2,21,等我不知道在哪裏定義索引的標準,或者即使有可能具體爲是。


好了,我這樣做,刪除列表中的「噪音詞」,而現在的行爲是有點不同,但仍然不是你所期望的東西。

的搜索將不會對「終結者2」(我只是在做這件事,我的僱主可能不是真正的快樂,如果我不方便透露我們在做什麼......反正,術語是有點不同,但原理相同),我沒有得到什麼,但我知道有對象包含這兩個單詞。

也許我做錯了什麼?我從ENG,ENU和NEU(中性)的噪聲配置中刪除了所有數字1 ... 9,重新生成索引,並嘗試搜索。

回答

2

這些「小詞」被認爲是「噪音詞」的全文索引。您可以自定義噪音詞彙列表。這blog post提供了更多的細節。當您更改干擾詞文件時,您需要重新填充全文索引。

0

我知道噪音的話文件,但我不爲什麼你的「終結者2」的例子仍然是給你的問題。你可能想試着在MSDN Database Engine forum上問這個專門研究這類事情的人。

0

您可以組合CONTAINS(或CONTAINSTABLE)用簡單的有條件的地方:

SELECT * FROM電影WHERE CONTAINS(標題, ' 「終結者2」')和標題LIKE '%終結者2%'

當CONTAINS找到所有終結者時,將會消除'終結者1'。

當然,引擎足夠聰明,以CONTAINS開始而不是類似的條件。