Search SOLR-如何将方面计数限制为resultset中返回的行

Search SOLR-如何将方面计数限制为resultset中返回的行,search,facet,solr,Search,Facet,Solr,/select/?q=*:*&行=100&面=on&面。字段=类别 我有大约10万个文档索引。但是我使用rows=100只返回100个文档。为类别返回的方面计数,但是返回所有索引文档的计数 我们能否以某种方式将facet限制为返回的结果集?i、 只有100行?对不起,但我认为这是不可能的。facet始终基于与查询匹配的所有文档。不是真正的答案,但可能比没有更好:结果分组功能(从主干中检出!): 其中facet.field=category类似于group.field=category,您将只获

/select/?q=*:*&行=100&面=on&面。字段=类别

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


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

对不起,但我认为这是不可能的。facet始终基于与查询匹配的所有文档。

不是真正的答案,但可能比没有更好:结果分组功能(从主干中检出!):


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

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

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

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

正如帕斯卡所指出的那样,我认为这是不可能的

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

  • 方法一:自己数数返回的100个结果。如果它们是分类字段,这是非常容易和快速的,但是如果它们是需要标记的文本字段,这就更难了,等等

  • 方法二:做两次传球:

  • 执行不带facet的普通查询(此时只需请求文档ID)
  • 收集返回文档的所有ID
  • 对所有字段和方面进行第二次查询,添加一个过滤器以将结果限制为在SETP2中收集的ID。类似于:

    选择/?q=:&facet=on&facet.field=category&fq=id:(312) 或28或1231…

  • 第一种方法更有效,我建议使用非文本文件。第二种方法的计算成本很高,但其优点是适用于所有类型的od字段。

    如果您想知道,可能会重复lakh==100000。首先回答您的问题-是的,方面的顺序与查询中的顺序相同。但是,这里我们不能将facet.limit用作facet.limit,它只限制要返回的facet的数量。它不限制结果集。因此,选择/?q=*:*&行=100&facet=on&facet.field=category&facet.limit=100将只返回100个类别值。正如这里的要求一样,它不会将结果集限制为100。down Vote as facet.limit只限制返回的facet的数量,而不是操作的行数,正如上面的评论所指出的,我认为这是对我的查询的回答,非常不幸的是,这个功能尚未在SOLR中实现。在一个拥有大量数据的生产服务器上,上面链接的另一个问题中所述的黑客行为也没有真正的价值。如果SOLR创建者能在不久的将来实现此功能,我们将不胜感激