0

私のステージング インデックスでahveを検索する、最初のスペルチェック修正として が取得されます。これは、 がインデックスにあるよりも多く表示されるためです( 500ドキュメントがインデックスに登録されています)。私のローカル インデックスでahve
を検索すると、インデックス内の他のどの単語よりも多く表示れるため、最初のスペルチェック修正としてhaveが表示されます。(私は 21 のドキュメントをインデックスに登録しています)。 これは、ステージング インデックスから返された単純なダムです。

<lst name="ahve">
<int name="numFound">5</int>
<int name="startOffset">0</int>
<int name="endOffset">4</int>
<int name="origFreq">0</int>
<arr name="suggestion">
<lst>
<str name="word">the</str>
<int name="freq">112</int>
</lst>
<lst>
<str name="word">are</str>
<int name="freq">67</int>
</lst>
<lst>
<str name="word">have</str>
<int name="freq">44</int>
</lst>
<lst>
<str name="word">acne</str>
<int name="freq">10</int>
</lst>
<lst>
<str name="word">ache</str>
<int name="freq">3</int>
</lst>
</arr>
</lst>

spellcheck.onlyMorePopular=trueorを追加spellcheck.onlyMorePopular=falseしても何も変わりません。
返された提案を出現頻度でソートしない方法はありますか?

4

1 に答える 1

4

デフォルトでは、スペルチェックの結果は、レーベンシュタイン文字列の距離の式と頻度、または頻度とスコアに基づいて返されます。

を実装するカスタムコンパレータを作成することにより、独自のソート方法を指定できますComparator。次に、そのメソッドの名前をcomparatorClasssolrconfig.xmlのフィールドに入力します。

<lst name="spellchecker">
  <str name="name">freq</str>
  <str name="field">lowerfilt</str>
  <str name="spellcheckIndexDir">spellcheckerFreq</str>
  <!-- comparatorClass be one of:
     1. score (default)
     2. freq (Frequency first, then score)
     3. A fully qualified class name
   -->
  <str name="comparatorClass">my.custom.ComparatorClass</str>
  <str name="buildOnCommit">true</str>
</lst>

さらにいくつかの提案:

  • このフィールドspellcheck.onlyMorePopularはソート順には影響しません。このフィールドは、各提案のクエリ結果をチェックし、正しい提案が存在する場合でも、クエリ結果が最も多い提案のみを表示します。注意して使用してください。

  • StopFilterFactoryrequestHandlerのインデックス側とクエリ側の両方でデータを渡すことにより、「the」、「that」などのストップワードを必ず削除してください。

詳細については、 http ://wiki.apache.org/solr/SpellCheckComponentを参照してください。

于 2012-11-26T15:21:44.573 に答える