Solr:查询 Facet 并计算缺失

Solr: Query Facet and count missing

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

我想找到Property_3_1044的最大值最小值以及所有[=46]的个数=]没有那个日期的项目.

我相信分面是最好的方法。如果有更好的方法请指正!


使用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 counts?)


使用 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 允许我仅使用查询方面来完成所有操作(但没有这样的方法,是吗?)。

我自己找到了解决办法;我只需要添加一个 facet 查询 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)。