弹性嵌套查询

Nested query in elastic

给定以下简单文档:

{
   time: 1234545455,
   value: 50.6,
   unit: 'test'
}

我想查找与具有特定单位的条目具有相同时间戳的所有条目。在伪 sql 中,我正在寻找查询:

SELECT * from xyz WHERE time IN (SELECT time from xyz WHERE unit = 'some-unit')

如何在 ElasticSearch 中完成此操作?

您可以使用带过滤器的聚合来获取时间,并使用结果进行第二次查询以获取文档。

先查询得到相关时间

  "size" : 0,
  "aggs" : {
    "relevant_time": {
      "filter": {
        "bool": {
          "must": [
            {
              "match": {
                "unit": "some-unit"
              }
            }
          ]
        }
      },
      "aggs": {
        "filterd_time": {
          "terms": {
            "field": "time"
          }
        }
      }
    }
  }

对于第二个查询,遍历存储桶returns并使用术语查询中的relevant_time来获取整个文档。