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
希望這有助於。
來源
2013-07-09 00:44:27
aks
只有評論。什麼是單詞的規則尚不清楚。停用詞可以用來消除。看起來單個數字不被視爲一個單詞,並且/被視爲單詞中斷。我希望你能得到答案。不知道Lucene有多少控制權,但需要考慮。 – Paparazzi 2013-04-04 20:54:52
不知道我明白你的意思,「當我用搜索詞搜索例如」1/2英寸管道「時,我應該找回包含」1/2「以及」half「的行!你是否希望Fulltext將「1/2」和「half」解釋爲等同的表示? – aks 2013-07-09 00:50:35