Вложенный запрос в упругой - PullRequest
0 голосов
/ 09 июня 2018

Учитывая следующий простой документ:

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

Я хочу найти все записи, которые имеют ту же метку времени, что и записи с какой-то определенной единицей.В псевдо-sql я ищу запрос:

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

Как это можно сделать в ElasticSearch?

1 Ответ

0 голосов
/ 10 июня 2018

Вы можете использовать агрегацию с фильтрами , чтобы получить время, и, используя результаты, выполнить второй запрос для извлечения документов.

Первый запрос для получения релевантного времени

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

Для второго запроса Выполните итерацию по возвращаемым сегментам и используйте значение allow_time в запросе termполучить весь документ (ы).

...