有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

自定义分数字段上的java排序SOLR自动建议

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

这是格式

<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类只存储freq、score和string值,而不存储自定义searchCount_l字段的值

问题:

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

  • 是否有solr的配置。拼写检查组件,我可以用它来实现这一点

  • solr中当前使用的过滤器。拼写检查组件


共 (1) 个答案

  1. # 1 楼答案

    您可以检查以下备选方案:-

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

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