SOLR - 如何将构面计数限制为结果集中返回的行

时间:2010-10-28 11:21:33

标签: search facet solr

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

我有大约10万个索引的文件。但我只使用rows = 100返回100个文档。为类别返回的构面计数,但返回索引的所有文档的计数。

我们可以某种方式将facet限制为返回的结果集吗?那只有100行?

4 个答案:

答案 0 :(得分:5)

正如帕斯卡所指出的那样,我认为不可能以任何直接的方式进行。

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

  1. 方法I:自行计算,返回返回的100个结果。如果它们是分类字段,则非常简单快速,但如果它们是需要标记化的文本字段等,则更难。

  2. 方法II:做两遍:

    1. 执行没有构面的常规查询(此时只需要请求文档ID)
    2. 收集所有已退回文件的身份证件
    3. 对所有字段和构面执行第二次查询,添加过滤器以将结果限制为在setp 2中收集的ID。例如:
      select/?q=:&facet=on&facet.field=category&fq=id:(312 OR 28 OR 1231 ...)
  3. 第一种方式更有效率,我建议非文本的filds。第二个是计算上昂贵的,但具有适用于所有类型的领域的优势。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

不是真正的答案,但也许比什么都好:结果分组功能(从主干检查!):

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

其中facet.field = category类似于group.field = category,你只会得到你指定的那么多组('facet hits')!

答案 3 :(得分:0)

如果您始终执行相同的查询(q=*:*),也许您可​​以使用facet.limit,例如:

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

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