Solr:查询构面并计数缺失

时间:2019-01-24 13:17:05

标签: solr facet

在Solr索引中,我有一个可选的日期字段。我们称之为Property_3_1044

我要找到Property_3_1044的最大值最小值,以及所有没有该日期的项的数量

我相信刻面是最好的方法。如果有更好的方法,请纠正我!


使用Query Facets可以使用聚合函数minmax分别获得最小值和最大值

http://localhost:8983/solr/Shard/query?q=:&json.facet={Date1:{type:query,facet:{"min":"min(Property_3_1044)","max":"max(Property_3_1044)"}}}&rows=0

结果:

"facets":{
  "count":249,
  "Date1":{
    "count":249,
    "min":"2019-01-09T00:00:00Z",
    "max":"2019-01-22T00:00:00Z"}}}

(除了问题:如何摆脱2个count?)


使用Terms Facets可以使用missing参数查找所有没有日期的项目

http://localhost:8983/solr/Shard/query?q=:&rows=0&json.facet={Date2:{terms:{field:Property_3_1044,missing:true,limit:0}}}

结果:

"facets":{
  "count":249,
  "Date2":{
    "buckets":[],
    "missing":{
      "count":240}}}}

如何组合这两个查询?我知道我可以同时执行这两个操作(只需将两个查询字符串连接起来),但是我想知道是否有更有效的方法。我假设同时执行查询构面和术语构面比仅拥有一个构面要昂贵得多。例如,聚合函数missing允许我仅使用查询构面来执行所有操作(但是没有这种方法,对吗?)。

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案;我只需要添加一个方面查询q即可过滤非空值-> [* TO *]

http://localhost:8983/solr/Shard/query?q=:&json.facet={Date1:{type:query,q:"Property_3_1044:[* TO *]",facet:{"min":"min(Property_3_1044)","max":"max(Property_3_1044)"}}}&rows=0

结果中,外部计数是所有项目的数量(此处为225),内部构面计数将给出已设置日期的项目数量,即。在应用q之后(此处:9):

"facets":{
  "count":225,
  "Date1":{
    "count":9,
    "min":"2019-01-09T00:00:00Z",
    "max":"2019-01-22T00:00:00Z"}}}

没有日期的商品数量是差异(225-9 = 216)。