【问题标题】:SOLR - How to have facet counts restricted to rows returned in resultsetSOLR - 如何将方面计数限制为结果集中返回的行
【发布时间】:2011-05-01 20:06:53
【问题描述】:

/select/?q=*:*&rows=100&facet=on&facet.field=category

我有大约 100 000 个文档被编入索引。但是我使用 rows=100 只返回 100 个文档。返回类别的构面计数,但返回所有索引文档的计数。

我们能否以某种方式将方面限制为返回的结果集?即只有 100 行?

【问题讨论】:

标签: search facet solr


【解决方案1】:

正如 Pascal 所指出的,我认为不可能以任何直接的方式实现。

我可以看到两种方法来实现这一点:

  1. 方法一:自己统计访问返回的100个结果。如果它们是分类字段,这非常容易和快速,但如果它们是需要标记化的文本字段等,则更难。

  2. 方法二:做两遍:

    1. 进行不带分面的普通查询(此时您只需要请求文档 ID)
    2. 收集所有返回文档的ID
    3. 对所有字段和构面进行第二次查询,添加过滤器以将结果限制为在 setp 2 中收集的那些 ID。类似于:
      select/?q=:&facet=on&facet.field=category&fq=id:(312 OR 28 OR 1231 ...)

第一种方式更高效,我建议用于非文本字段。第二种计算成本高,但具有适用于所有类型 od 字段的优势。

【讨论】:

    【解决方案2】:

    如果你总是执行相同的查询(q=*:*),也许你可以使用facet.limit,例如:

    select/?q=*:*&rows=100&facet=on&facet.field=category&facet.limit=100
    

    告诉我们 solr 在构面中使用的顺序是否与查询 : 中的顺序相同。

    【讨论】:

    • 首先回答您的问题 - 是的,方面的顺序与查询中的顺序相同。但是,这里我们不能使用 facet.limit,因为 facet.limit 只限制要返回的 facet 的数量。它不限制结果集。因此, select/?q=*:*&rows=100&facet=on&facet.field=category&facet.limit=100 只会返回 100 个类别值。它不会按照这里的要求将结果集限制为 100。
    • 被否决,因为 facet.limit 仅限制返回的构面数量,而不是所执行的行,正如上面的评论指出的那样
    【解决方案3】:

    不是一个真正的答案,但总比没有好:结果分组功能(从主干检查!):

    http://wiki.apache.org/solr/FieldCollapsing

    其中 facet.field=category 与 group.field=category 类似,您将只获得指定数量的组(“facet hits”)!

    【讨论】:

      【解决方案4】:

      抱歉,我认为这是不可能的。构面始终基于与查询匹配的所有文档。

      【讨论】:

      • 我想这就是我的查询的答案,确实很遗憾这个功能还没有在 SOLR 中实现。在具有大量数据的生产服务器上,上面链接的另一个问题中阐述的黑客也并不真正值得。如果 SOLR 创建者可以在不久的将来实现此功能,将不胜感激
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2017-05-07
      • 2010-12-07
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 2013-01-29
      相关资源
      最近更新 更多