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=truespellcheck.onlyMorePopular=false不改变任何东西。
有没有办法不按出现频率对返回的建议进行排序?

4

1 回答 1

4

默认情况下,拼写检查结果是根据 Levenshtein 字符串距离公式然后频率或频率然后分数返回的。

您可以通过编写实现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不影响排序顺序。该字段检查每个建议的查询结果,即使存在正确的建议,也只显示查询结果最多的建议。谨慎使用。

  • StopFilterFactory通过在requestHandler 的索引和查询端传递数据,确保删除诸如“the”、“that”等停用词。

See: http://wiki.apache.org/solr/SpellCheckComponent for more information.

于 2012-11-26T15:21:44.573 回答