2012-08-23 20 views
1

我的代碼是如下:SolrQuery不返回結果爲少於3個字符

SolrQuery query = new SolrQuery(); 
    query.setQuery(q.trim()); 
try { 
     QueryResponse res = getSolrServer().query(query); 
     return res.getResults(); 
    } catch (SolrServerException sse) { 
     log.error(sse); 
    } 

的問題是,當我有一個查詢更多然後3個字符此返回我的反應,例如查詢字符串「che」會迴應結果,但查詢字符串「ch」會返回我沒有迴應。 有沒有一種方法可以覆蓋Solr查詢的最小長度爲3個字符。

是下面的XML導致了問題,如果是我可以用Java

<analyzer type="index"> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="50" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 

欣賞提前幫助編程覆蓋它。

感謝和問候,

Vaibhav的

+0

Solr會匹配被索引的內容。可能你有一個che而不是ch的匹配。你能否提供更多關於索引什麼,索引如何的知識? – Jayendra

+0

che只是一個例子,問題是可以搜索超過3個字符,但少於3個字符的字符串不會響應任何結果。 – vaibhav

+2

什麼是您在該領域的配置?由於除非您在分析器鏈中使用LengthFilter,否則不存在此配置。 – Jayendra

回答

3

NGramTokenizerFactory: -
默認行爲。請注意,這個標記器在整個字段中運行。它不會在空白處破壞字段。結果,空格字符被包含在編碼中。

<analyzer> 
    <tokenizer class="solr.NGramTokenizerFactory"/> 
</analyzer> 

在: 「哎男人」

輸出: 「H」, 「E」, 「Y」, 「」, 「M」, 「一」, 「N」, 「他」, 「EY」, 「Y」, 「M」, 「MA」, 「一個」

與配置

所以: - minGramSize = 「3」 maxGramSize = 「50」 小於3將待過濾的項目

對於兩個字母詞,因爲您沒有索引中的詞彙,這些詞彙將永遠無法搜索。您需要將minGramSize更改爲2以使其可搜索。

+0

但是,這可以重寫在問題中發佈的Java代碼? – vaibhav

+1

nope,因爲您沒有索引中的術語,這些永遠不會被搜索到。您需要將minGramSize更改爲2以使其可搜索。 – Jayendra

+0

我們是否可以根據語言切換分析儀,實際上使用中文和日語等語言,我們希望提供基於單個字符的搜索。 – vaibhav

相關問題