2010-06-11 201 views
5

我使用SOLR與NGramTokenizerFactory一起幫助搜索與SOLR

NGramTokenizer配置了3

這是一個最小的字長字子創建搜索令牌短詞意味着我可以搜索例如「unb」然後匹配「unbelievable」這個詞。

但是,我有一個短的單詞,如「我」和「in」的問題。這些都沒有索引SOLR(我懷疑這是因爲NGramTokenizer),因此我無法搜索它們。

我不想將最小字長度減少到1或2,因爲這會創建一個巨大的搜索索引。但是我希望SOLR能夠包含長度已經低於這個最小值的整個單詞。

我該怎麼做?

/卡斯滕

回答

6

首先,要搞清楚爲什麼你的話不要被利用「分析工具」

http://localhost:8080/solr/admin/analysis.jsp 

只要把字段和文本您正在搜索Solr的索引看看哪個分析器正在過濾你的短期。我建議你這樣做,因爲你說你只有一個「嫌疑犯」,你必須確定哪個分析器過濾你的數據。

那麼你爲什麼不直接在沒有分析器的情況下將該術語複製到另一個字段?

通過這種方式,您的術語將被編入索引兩次,並將顯示爲精確的單詞和n-gram。 然後你必須處理兩個不同領域的分數。

我希望這可以幫助你。

一些鏈接,聚合和copyfield屬性:

Indexing data in multiple fields

Using copy field tag

+1

感謝您的建議。我對兩個詞進行了分析:一個正常情況 - 「jeudan」和單字母詞「j」。這裏是結果http://pastie.org/1000520 正如你所看到的,它實際上是過濾出單字母單詞的NGramTokenizer--或者在這個EdgeNGramTokenizer中,但我已經用兩者進行了測試。 我可以嘗試你的建議,但我寧願讓Solr做所有的文本消息。我做了很多特定於字段的搜索,因此您的建議會導致需要重寫這些查詢以查看兩個文本字段而不是一個。可能但反直覺。 – 2010-06-11 09:05:53

+1

考慮到在solr中有一個典型的聚合字段,在這個字段中進行查詢,然後是一系列具有不同類型和分析器的字段。 只需使用複製域標記將所有源域複製到目標。你不必改變你的查詢。 – 2010-06-11 09:41:08

+1

那麼你的答案實際上解決了我面臨的這個問題和其他問題。我不知道分析工具。我最終通過分析器嘗試了其他一些過濾器和標記器,並最終在索引和查詢部分使用了PhoneticFilter。非常整潔 - 非常感謝! – 2010-06-14 04:26:17