2016-05-13 134 views
3

我想查找"john doe"並使用"hn do"搜索。 "*hn*""john\ d\*"有效,但當查詢包含空格時,"*hn\ do*"不起作用。逃避通配符也沒有幫助。Solr子串空白搜索

我的字段定義如下:

<fieldType name="string" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <!--<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="25" side="back" />--> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

回答

2

嘗試使用NGramTokenizerFactory。它會在給定範圍內生成大小爲n-gram的令牌。正如下面

<analyzer> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="10"/> 
</analyzer> 

它將作品:

In: "john doe" 
Out: "jo","joh","john", "john ","john d","john do", 
"john doe", "oh", "ohn","ohn ", "ohn d"... 

並從fieldType定義KeywordTokenizerFactory。

您也可以考慮使用solr.EdgeNGramTokenizerFactory

它有另一個屬性side的。

side:(「front‘或’back」,默認爲「front」)無論從文本的開始(front)或結束(back

這將計算正克工作原理:

In: "babaloo" 
Out: "oo", "loo", "aloo", "baloo" 

KeywordTokenizerFactory:這tokenizer將整個文本字段作爲一個單一的令牌。