2017-11-07 8 views
0

私はカスタムフィールドタイプを持っている:NGRAMとEdgeNGramフィルターは/検索

<fieldType class="solr.TextField" name="text_pre" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

アドレスのデータベーステーブルインデックス例えば私のSOLRインスタンスへのテキストとして完全なアドレス、つまり:

123 W Washington, Some Place, Some State 12345 

また、ユーザーが現在入力している値に最も近い検索結果を返す先読み入力ボックス。

私の問題は、上記の例のようなアドレスでは、 "W"または "West"または "W"と入力することです。カスタムフィールドの種類に基づいて上記のアドレスを返しません。

これを達成するためにフィールドタイプのフィルタをカスタマイズすることが可能かどうかはわかりません。私は "西"または "w"をサポートする必要はありません。 "123 W Was"とタイプし、上記のサンプルアドレスを取得することで、適切な結果を得ることができる必要があります。

答えて

1

WhitespaceTokenizerでNgramFilterFactoryを使用すると、トークンごとにngramが得られます。 KeywordTokenizerFactoryを使用すると、個々の単語ではなく文字列フィールド全体からngramトークンが作成されるため、もっと欲しいものを得ることができます。この方法でも、複数のスペースで動作します。

<fieldType class="solr.TextField" name="text_pre" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 
+0

返信いただきありがとうございます。私はこれを今チェックアウトし、それがどうなっているのかを見て、それが私の問題を修正すればチェックマークをつけます:) –

+0

それはトリックでした! –

関連する問題