ELASTICSEARCH-在嵌套字段上按日期排序聚合

时间:2020-09-04 08:14:03

标签: elasticsearch

我正在开发一个查询,其中我计算最近文档中包含多少个唯一的“ cp”。 json由几个嵌套字段组成。 当我添加到带有嵌套字段的json时,我无法仅显示具有最新日期的json值。 我完成了嵌套聚合,最后我使用了top_hits过滤器以降序排序,并且它通过大小返回了我的最后一个。 但是它仍然会返回所有具有不同日期的文档。

JSON:

      "data" : [
        {
          "addresses" : [
            {
              "cp" : "33.33.33",
              "services" : [
                {
                  "field1" : "true",
                  "field2" : "1234",
                }
              ]
            }
          ],
        }
      ],
      "created_at" : "2020-09-03 14:39:01",
      "@timestamp" : "2020-09-04T05:53:22.341661Z",
    }
  },

查询:

{"size": 0, 
  "aggs": {
    "nested": {
      "nested": {
        "path": "data.addresses"
     
          },
          "aggs": {
            "nested": {
              "nested": {
                "path": "data.addresses.services"
              },
              "aggs": {
                "filter": {
                  "filter": {
                    "term": {
                      "data.addresses.services.field1.keyword": "true"
                    }
                  },
                  "aggs": {
                    "unique": {
                      "cardinality": {
                        "field": "data.addresses.services.field2.keyword"
                      }
                    },
                    "range":{
                      "top_hits": {
                        "size": 1,
                        "sort": [
                          {"created_at.keyword": {"order": "desc"}}]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    

我尝试按预定义的字段“ created_at”或@timestamp进行排序,但结果相同。 有什么建议可以帮助我解决问题吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,解决方案是添加

"order": {
          "_key": "desc":

代替top_hits。

查询

{"size": 0, 
  "aggs": {
    "filtrofecha": {
      "terms": {
        "field": "created_at.keyword",
        "order": {
          "_key": "desc"
        },
        "size": 1
      },
      "aggs": {
        "nested": {
          "nested": {
            "path": "data.addresses"
              },
              "aggs": {
                "nested": {
                  "nested": {
                    "path": "data.addresses.services"
                  },
                  "aggs": {
                    "filter": {
                      "filter": {
                        "term": {
                          "data.addresses.services.field1.keyword": "true"
                        }
                      },
                      "aggs": {
                        "unique": {
                          "cardinality": {
                            "field": "data.addresses.services.field2.keyword"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
相关问题