我有一个apache SOLR Web应用程序。我正在保存在我的数据库中输入的所有查询,并将查询字符串和查询字符串计数索引到Suggestion核心。
这是格式
<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值,而不存储custom searchCount_l字段的值。
问题:
我应该实现一个自定义搜索处理程序,它会查询Suggestion核心并提升searchCount_l字段。但这对Autosuggest来说是一个好方法吗?如果我使用自定义搜索请求处理程序然后使用给定的建议组件,它会影响速度吗?
我可以使用solr.SpellCheckComponent进行配置吗?
solr.SpellCheckComponent目前使用了哪些过滤器?
答案 0 :(得分:1)
您可以检查以下备选方案: -
使用带有边缘图的普通搜索过滤器生成标记 由于您已经在维护计数,因此您可以对计数进行搜索和排序 这将有一个索引,该索引将随着查询需要存储而增长,但会快速执行。
否则,只需将每个搜索词编入索引作为单独的文档字段,不要存储查询 然后,您可以使用构面组件和facet.prefix query来检索搜索建议 默认情况下,计数将由小平面排序自行处理 性能会很快,索引大小也会受到限制。