個々の単語や部分句の「で始まる」に基づいてクエリを実行できるインデックスを作成しようとしています。
たとえば、テキスト " blah blah stuff couple blue drums blah more blah
" (これは基本的にコピー フィールドを使用したレコードの全文検索であることに注意してください) が与えられた場合、次のように一致させたいと考えています。
- クー
- カップル
- カップルブルー
- カップルブルー
- ブルードラム
- ブルードルー
「カップル ドラム」のクエリと一致するべきではありません。
「text_general」タイプを使用してみましたが、「cou」などの部分的な単語クエリは実行されません。
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
エッジ ngram フィルターも試しましたが、必要なフレーズを実行していません。たとえば、text:'couple drums'
「カップル」または「ドラム」の結果を返すクエリなどです。
<fieldType name="fulltext2" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="30" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldType>
私がやろうとしていることを達成するトークナイザーとフィルターの組み合わせはありますか?