Solr分组空字段

时间:2013-02-22 11:14:20

标签: solr field grouping

修改

如果我不能很好地解释我的需要,我很抱歉。我会尝试给出更好的解释。

我拥有:数百万个具有字段X的文档,另一个字段Y和另一个不需要的字段Z(因此在某些文档中可能为空而在其他文档中不为空。)

我想做什么:搜索字段X等于某事物的文档并按字段Z对它们进行分组(这样每个字段Z值只返回1个文档),但我想要字段Z为空的文档要包含在结果中(所有这些),并按字段Y对结果进行排序(因此我无法将请求分成两个请求)。

我希望这更清楚。

2 个答案:

答案 0 :(得分:1)

这是我能找到的最佳答案(来自solr邮件列表用户):

想法是使用字段Z的复制字段,并且在索引数据时,如果字段Z为空,则在复制字段中生成唯一值。分组时,使用复制字段而不是字段Z. (如果字段Z仅用于分组,则可以单独使用而不使用复制字段。)

答案 1 :(得分:0)

您可以group.query使用group.main来实现这一目标。

例如,下面的查询会提取价格从0到10的所有文档,并按结果对结果进行分组。设置group.query=popularity:[* TO *]可确保存在受欢迎程度。使group.main=true确保group.query结果是主要结果。

select?q=price:[0%20TO%20 10]&wt=json&group=true&group.field=popularity&group.query=popularity:[*%20TO%20*]&group.main=true

参考https://wiki.apache.org/solr/FieldCollapsing

更新:我看到上面的内容不起作用。所以建议我编辑答案,而不是删除上面的答案并给出新答案: - )。

你不能这样做2个查询吗?

“搜索字段X等于某事物的文档并按字段Z对它们进行分组(这样每个字段Z值只返回1个文档)”

q=X:1&group=true&group.field=Z

“我希望将字段Z为空的文档包含在结果中(所有这些文档),并按字段Y”

对结果进行排序
q=(X:1 AND -Z:[* TO *])&rows=SOME_LARGE_NUMBER&sort=Y asc