自定义分数字段上的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 楼答案
您可以检查以下备选方案:-
使用带edgegrams筛选器的普通搜索生成令牌
由于您已经在维护计数,因此可以根据计数进行搜索和排序
这将有一个索引,该索引将随着查询需要存储而增长,但执行速度很快
否则,只需将每个搜索词作为单独的文档字段进行索引,而不存储查询
然后可以使用facet组件和facet.prefix query检索搜索建议
默认情况下,计数将由facet计数排序自行处理
性能会很快,索引大小也会受到限制