2013-04-04 49 views
1

我已經創建了替代辭典條目以下:在SQL Server中,如何配置全文檢索索引1/2,1/3,1/4,等等

Pair: 1/2, half 
Pair: 1/3, third 
Pair: 1/4, quarter 
Pair: 1/8, eighth 

當我做一個搜索一個搜索詞,如「1/2英寸管道」,我應該找回包含「1/2」以及「half」的行。我有兩個這樣的行。但是,通過默認全文搜索,似乎「1/2」未包含在所討論列的全文索引結果中。

我還沒有找到一個明確的答案,關於什麼,在哪裏,如何配置全文索引的重新索引,以便全文搜索條件包括允許1/2,1/3等。對於這個問題,我還需要在全文搜索中使用單個數字。

如果有人能指導我介紹一些文件,說明我可以完成這項任務的步驟,我將不勝感激。

+0

只有評論。什麼是單詞的規則尚不清楚。停用詞可以用來消除。看起來單個數字不被視爲一個單詞,並且/被視爲單詞中斷。我希望你能得到答案。不知道Lucene有多少控制權,但需要考慮。 – Paparazzi 2013-04-04 20:54:52

+0

不知道我明白你的意思,「當我用搜索詞搜索例如」1/2英寸管道「時,我應該找回包含」1/2「以及」half「的行!你是否希望Fulltext將「1/2」和「half」解釋爲等同的表示? – aks 2013-07-09 00:50:35

回答

0

我最好的猜測是全文搜索中不支持「/」字符。 我會建議使用LIKE,雖然速度較慢。

+0

在我的情況下,使用「like」不是一種選擇。 – NW7US 2013-04-04 22:52:32

+0

當然,其他人在全文索引中正在使用包含1/2等形式的分數的數據。 – NW7US 2013-04-06 16:37:33

1

sys.dm_fts_parser是一個很棒的DMF,它可以幫助您瞭解Fulltext如何解析句子以及哪些單詞將存儲在內部索引中。關於第一個例子中我看到下面的輸出 -

select * from sys.dm_fts_parser(N'"Pair: 1/2, half"', 1033, 0, 0) 

keyword group_id phrase_id occurrence special_term display_term expansion_type source_term 
0x0070006100690072  1 0 1 Exact Match pair 0 Pair: 1/2, half 
0x0031     1 0 2 Noise Word 1  0 Pair: 1/2, half 
0x006E006E0031   1 0 2 Noise Word nn1  0 Pair: 1/2, half 
0x0032     1 0 3 Noise Word 2  0 Pair: 1/2, half 
0x006E006E0032   1 0 3 Noise Word nn2  0 Pair: 1/2, half 
0x00680061006C0066  1 0 4 Exact Match half 0 Pair: 1/2, half 

FT打破了「1/2」和索引它爲1,NN1,2和NN2(「N-N」爲數字值的內部表示)。在這種情況下,正在使用默認停止列表,這另外導致這些值被標記爲噪音詞,因此它們不會被添加到索引中。通過從停止列表中刪除條目或創建新的空白停止列表並將其與索引關聯起來,這很簡單。

到目前爲止,根本沒有任何方法讓FT忽略在這種情況下它被視爲字分隔符的'/'符號。

編輯 - 顯然,有一個解決方法,它涉及到創建一個自定義字典爲detailed here。因此,對於英文,我在Binn目錄中創建了一個'Custom0009.lex'文件,併爲'/'添加了一個條目。這樣做顯示sys.dm_fts_parser以下輸出(不要忘記fdhost重啓) -

select * from sys.dm_fts_parser(N'"Pair: 1/2, half"', 1033, NULL, 0) 

keyword    group_id phrase_id occurrence special_term display_term expansion_type source_term 
0x0070006100690072 1 0 1 Exact Match pair 0 Pair: 1/2, half 
0x0031    1 0 2 Exact Match 1  0 Pair: 1/2, half 
0x006E006E0031  1 0 2 Exact Match nn1  0 Pair: 1/2, half 
0x002F    1 0 3 Exact Match/  0 Pair: 1/2, half 
0x0032    1 0 4 Exact Match 2  0 Pair: 1/2, half 
0x006E006E0032  1 0 4 Exact Match nn2  0 Pair: 1/2, half 
0x00680061006C0066 1 0 5 Exact Match half 0 Pair: 1/2, half 

希望這有助於。