2016-05-13 9 views
3

"john doe""hn do"で検索したいと思います。 "*hn*"または"john\ d\*"が機能しますが、クエリに空白が含まれていると"*hn\ do*"が機能しません。ワイルドカードをエスケープしても助けにならない。空白文字付き部分文字列検索

マイフィールドの定義は次のように:

<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グラムトークンを生成します。

<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を削除します。

また、それは別の属性sideを持ってsolr.EdgeNGramTokenizerFactory

を使用して考えることができます。

side:( "front "または" back"、デフォルトは "front" である)テキストの先頭(front)からnグラムを計算するかどうかの端から(back

それはします作品のように:

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

KeywordTokenizerFactory:単一のトークンとしてこのtokenizer扱い全体のテキストフィールド。

関連する問題