Solr 有没有办法通过自动建议返回真实结果计数?

问题描述 投票:0回答:1

我设置了 Solr v9.5 服务,允许用户搜索最终用户内容的语料库。 我研究了三种实现自动建议的方法,这些方法向用户显示每个建议应该期望的结果数量。 各有各的缺点:

实现 A:在索引期间,我将可搜索字段收集到“建议”字段中,并调整

<requestHandler>
以从该字段返回值。 PRO: 返回与索引文档的实际集合极其相关的值。 CON: 为了获取将返回的结果数量,对于每个建议,我发出一个新的常规查询,并解析出
numFound
,在我可以显示任何建议之前添加了很多时间。

实现 B:Solr 有一个

Suggester
设施。 PRO: 特别适合自动建议。 CON: 文档中没有任何内容表明支持返回每个返回建议的结果计数。

实现 C:Solr 有一个

Terms Component
功能,用于获取与输入术语匹配的文档计数,它们声明并演示了这些文档可用于自动建议。 PRO: 这是最接近我想要的,在一次操作中返回匹配项和计数。 CON: 使用这些匹配的术语进行搜索查询时,计数与实际结果数不符。

实施 C 的更多详细信息:如果我提交此术语查询,其中

terms.fl
字段与常规用户搜索的
qf
字段匹配:...

http://localhost:8983/solr/my_core/terms?wt=json&terms.limit=-1&terms.regex.flag=case_insensitive&terms.fl=title_list&terms.fl=topic_list&terms.fl=summary&terms.fl=category_name_list&terms.fl=genre&terms.fl=skill_list&terms.fl=skill_type_list&terms.fl=search_terms&terms.fl=landing_page_keyword&terms.fl=language_name&terms.regex=.*canada.*

...我收到以下 Solr 响应:...

{
  "responseHeader":{
    "status":0,
    "QTime":88},
  "terms":{
    "title_list":[
      "canada",12],
    "topic_list":[
      "canada",52],
    "summary":[
      "canada",32,
      "canada,",10,
      "canada.",10],
    "category_name_list":[],
    "genre":[],
    "skill_list":[],
    "skill_type_list":[],
    "search_terms":[
      "canada",7,
      "canada,",7],
    "landing_page_keyword":[],
    "language_name":[]}
}

问题是,如果我定期进行最终用户搜索“canada”,我会得到 71 个结果。 将上述回复中的文档计数总计为 130。(即使我不计算“加拿大”和“加拿大”的文档计数,我也有 103 个。)

我认为这种差异是因为,例如,给定的文档在标题和摘要中可能都有“加拿大”,因此被直接文档计数计算了两次,

Terms Component
确实如此。

那么,有没有办法让 Solr 返回自动建议术语以及每个建议术语的搜索结果的确切数量?

我对服务实现有很大的自由度,所以如果有一种方法可以做到这一点而不涉及上述任何内容、专门的配置等。我很愿意听到它。

谢谢你。

solr autocomplete autosuggest
1个回答
0
投票

我的问题最终得到了“实现 A”。 我猜,增加的时间其实是微不足道的,主要是因为 Solr / Lucene 的速度有多快。

事实证明,在足够的时间用于生产使用的情况下,这已经足够了。 而且,如果它开始变得太慢,可以使用直接的缓存选项来缓存给定术语的结果计数:大多数用户的搜索都是针对相当有限的术语集,并且结果计数在几天或几周的时间范围内保持稳定。

© www.soinside.com 2019 - 2024. All rights reserved.