Solr分组空字段

0h4hbjxa  于 2022-09-27  发布在  Solr
关注(0)|答案(3)|浏览(209)

编辑

如果我没有很好地解释我的需求,我很抱歉。我会尽量给出更好的解释。
我所拥有的:数百万个文档都有一个字段X、另一个字段Y和另一个不需要的字段Z(因此在某些文档中它可以为空,而在其他文档中则不能为空)。
我想做的是:搜索字段X等于某个值的文档,并按字段Z对其进行分组(这样每个字段Z值只返回一个文档),但我希望将字段Z为空的文档包含在结果中(全部),然后按字段Y对结果进行排序(因此我无法将请求分为两个请求)。
我希望这一点更加明确。

lc8prwob

lc8prwob1#

这是我能为我的问题找到的最佳答案(来自solr邮件列表用户):
其思想是使用字段Z的复制字段,并且在索引数据时,如果字段Z为空,则在复制字段中生成唯一值。分组时,使用复制字段而不是字段Z。(如果字段Z仅用于分组,则可以单独使用而不使用复制字段)。

cx6n0qe3

cx6n0qe32#

您可以使用group.query和e1d1e来实现这一点。
例如,下面的查询获取价格从0到10的所有文档,并按流行程度对结果进行分组。设置group.query=popularity:[* TO *]可确保受欢迎程度。制作group.main=true可以确保团队。查询结果是主要结果。
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

更新:我发现上面的方法不起作用。SO建议我编辑答案,而不是删除上面的答案并给出新答案:-)。

你不能这样做两个查询吗?
“搜索字段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
bnl4lu3b

bnl4lu3b3#

我通过将group.filedgroup.query组合在一起,成功地做到了这一点,如下所示:
group.filed=myfield&group.query=-myfield:*
结果是两个对象,您的字段和查询如下:

{ 
  responseHeader: { // },
  grouped: { 
     "myfield": { /// the data },
     "-myfield:*": {/// the data},
  }
}

相关问题