solr を使用して検索フィールドの自動提案ドロップダウンを作成したいのですが、フレーズの提案を取得しようとすると行き詰まります。「犬 t」を検索すると、「犬のおやつ」、「犬のトリック」、「犬のタグ」などのフレーズを含む 1 つの結果セットを取得したいのですが、代わりに 2 つの結果セット (1 つは「犬」) を取得します。 」 (「犬」「犬の骨」「犬」など) と「t」の別のもの (「木」「時間」など)
私のクエリのURLは次のとおりです。
http://localhost:8985/solr/mycollection/suggest?q=%22dog%20t%22&wt=json
私のリクエストハンドラーはsolrconfigで次のように定義されています...
<searchComponent class="solr.SpellCheckComponent" name="suggest">
<lst name="spellchecker">
<str name="name">suggest</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
<str name="field">suggest</str> <!-- the indexed field to derive suggestions from -->
<float name="threshold">0.0001</float>
<str name="buildOnCommit">true</str>
</lst>
<str name="queryAnalyzerFieldType">textSuggest</str>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
「提案」のフィールドタイプは、スキーマで次のように定義されています
<fieldType name="textSuggest" class="solr.TextField" positionIncrementGap="100" >
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
preserveOriginal="1" splitOnCaseChange="1"
/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>