以下は、オートコンプリートの目的で使用する新しいフィールド タイプです。
<fieldType name="autocomplete_edge" class="solr.TextField">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="2"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
また、フィールド定義は次のとおりです。
<field name="title" type="autocomplete_edge" indexed="true" stored="true" required="true"/>
私の問題は、インデックス付きフィールドのテキストが次のようになっているとしましょう。
"ロード・オブ・ザ・リング"
私の目標は、SOLR が次のすべてのクエリでこのドキュメントを返すことができるようにすることです。
query-1: title:"th" query-2: title:"the lor" query-3: title:"lord of" query-4: title:"the rin"
等
EdgeNGram によるトークン化とフィルタリングの結果のインデックスを分析しているときに、インデックス付きの用語が次のようになっていることがわかりました。
"th" "the" "lo" "lor" "lord" "of" "th" "the" "ri" "rin" "ring" "rings"
したがって、クエリ「lord of」は一致しますが、クエリ「the rings」は一致しません。
インデックス作成 (パフォーマンスとディスク容量) のために、エッジのある ngram のすべての可能な組み合わせを保持することはコストがかかることを認識していますが、アプリケーションではそれを行う必要があります。
可能な解決策は大歓迎です。
よろしくお願いいたします。