java - 在自定义分数字段上对 SOLR 自动建议进行排序

标签 java solr solrj

我有一个 apache SOLR Web 应用程序。我正在保存在数据库中输入的所有查询,并将查询字符串和查询字符串计数索引到建议核心。

格式如下

<doc>
    <str name="id">superman</str>
    <long name="searchCount_l">10</long>   //superman has been queried 10 times
<doc>
<doc>
    <str name="id">superman movie</str>
    <long name="searchCount_l">30</long>  //superman movie has been queried 30 times
<doc>

配置:

 <searchComponent name="suggest" class="solr.SpellCheckComponent">
    <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.fst.WFSTLookupFactory</str>
        <str name="buildOnCommit">true</str>
        <str name="field">id</str>
    </lst>
</searchComponent>

如果用户输入“sup”,我希望“超人电影”成为自动建议列表中的第一个。

我考虑过实现一个 comparatorClass

public class MySuggestionComparator implements Comparator<SuggestWord> 

但是 SuggestWord 类仅存储频率、分数和字符串值,而不存储自定义 searchCount_l 字段的值。

问题:

  • 我是否应该实现一个自定义搜索处理程序来查询建议核心并增强 searchCount_l 字段。但这对于 Autosuggest 来说是一个好方法吗?如果我使用自定义搜索请求处理程序然后使用给定的建议组件,会影响速度吗?

  • 是否有 solr.SpellCheckComponent 的配置可以用来实现此目的?

  • solr.SpellCheckComponent 目前使用哪些过滤器?

最佳答案

您可以检查以下替代方案:-

使用带有edgegrams过滤器的普通搜索来生成标记。
由于您已经在维护计数,因此您可以对计数进行搜索和排序。
这将有一个索引,该索引会随着查询需要存储而增长,但执行速度会很快。

否则,只需将每个搜索词索引为单独的文档字段,而不存储查询。
然后,您可以使用构面组件和 facet.prefix query检索搜索建议。
默认情况下,计数将由构面计数排序自行处理。
性能会很快,但索引大小会受到限制。

关于java - 在自定义分数字段上对 SOLR 自动建议进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17400639/

相关文章:

java - 如何在构造函数中避免这种不必要的 throws 语句?

java - solr安装问题

lucene - 为什么在进行模糊搜索时绕过 Solr 过滤器禁用?

XML 格式的 solr 原子更新

mysql - Solr 和 MySQL,如何保持更新的索引,如果它很简单,是否还需要数据库?

java - API 上的 GET 调用出现 403 状态

java - 如何使用 javax.xml.parsers.DocumentBuilder 只读取 xml 文件的一部分?

java - 在简单的 Java 类中访问远程企业 Bean

mongodb - MongoDB 设置的全文搜索选项

java - Solrj 日期请求