私は、Solr が提供するスペル候補をできるだけ多く保持しながら、改善する方法を見つけようとしています。ある特定の検索で、私は大きな頭痛の種になりました。
「黄色い花」
この Solr を検索すると、「yellow flowersit」という候補が表示されます。
私が知る限り、これは「花。
これは、この特定のクエリで発生した問題の多くの繰り返しの 1 つにすぎません (他にもたくさんあると思いますが、この問題の解決に集中しています)。以前は、次のような単語を連結する省略記号に問題がありました。
"flowers...a" => "yellow flowersa"
クエリに spellcheck.accuracy を追加するなど、さまざまなことにうんざりしましたが、無効なものを除外する前に、有効な提案が除外されていることがわかりました (0.7 で「ace」 => 「acer」を除外しましたが、「flowerse」は除外しませんでした)。 " 0.9 まで)。true と false の両方に対して onlyMorePopular を試しましたが、どちらも大きな効果はありませんでした。
私はthresholdTokenFrequencyを使用しようと考えていますが、インデックスに一度しか表示されない可能性のある適切な名前などの多くの有効な提案を失うと感じています.
同様に、「flowerse」を検索すると、より適切な「flowers」の候補ではなく、「flowersse」のような候補が表示されます。
スペル候補の結果を改善するにはどうすればよいですか? または、候補に表示されない単語や類似した単語をリストするだけでもよいですか?
検索語がインデックス内で最も一般的な単語の 1 つであるのに、Solr が数回しか表示されない奇妙な単語の組み合わせを提案するのはなぜですか?
テキスト フィールド タイプの定義:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(…|[\.]{2,})" replacement=" " />
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
提案フィールドの定義:
<field name="suggestions" type="text" indexed="true" stored="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true" />
requestHandler:
<requestHandler name="standard" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="spellcheck.onlyMorePopular">false</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">1</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>