2014-08-28 86 views
1

我是新來的Solr,我正面臨一個奇怪的問題。Solr不搜索以「e」結尾的單詞

當我搜索以「e」結尾的單詞時,它總是返回沒有結果。例如:

假設DB上有一條記錄「QWERTY」。 當搜索詞是「QWERT」時,它將返回記錄「QWERTY」。 當搜索詞是「QWERTY」時,它將返回記錄「QWERTY」。 (正確)

假設DB上有一條記錄「ABCDE」。 當搜索詞是「ABCD」時,它返回記錄「ABCDE」。 當搜索詞是「ABCDE」時,它什麼都不會返回!

我發現了一些與「solr忽略最後一個字母」和一些這樣的東西有關的問題,但沒有找到與此相關的內容。

我使用Solr的0.9.2.2(3年以上項目),Rails的3.2.2,阿帕奇2.2.22和Ubuntu 12.04 LTS

任何想法?

謝謝!

- 編輯 - 架構: http://www.speedyshare.com/khdcr/schema.xml

查詢: QUERY_STRING =( 「%」 +參數[:諾姆] + 「%」)。upcase produto_busca = Estoque :: Produto.of( (「nome LIKE?」或「est_produtos.nome_fantasia LIKE?」,query_string,query_string).order(「nome ASC」)

有幾個查詢有同樣的問題。這只是一個例子。

+1

需要Solr schema.xml和您正在使用的查詢 – arun 2014-08-28 17:52:01

+0

我已經使用查詢和模式編輯了帖子。 – Laerte 2014-08-28 21:43:52

回答

1

幾周後,我找到了解決這個問題的辦法。

Lucene Solr有一個名爲Stemming的過濾器。這個過濾器基本上捕捉到單詞的「根」。它消除了一些字母來做到這一點,例如:

我的系統中的關鍵點是:

  • 語言:葡萄牙語
  • 不索引全文,只是一些單詞。

解決的辦法是刪除Solr模式(solr的/ CONF/schema.xml中)詞幹:

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type='index'> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15" /> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

新的代碼基本上分離由 「空白」 的字樣,改變特殊characteres定期(á - > a),把所有的字母改爲小寫(Aaa - > aaa)並使用NGram過濾器(abc - > ab bc abc ...)。

(參考文獻:https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions

希望這有助於...

PS:有詞根爲多種語言版本。