Запрос ElasticSearch - несколько терминов, сопоставленных в разное время - PullRequest
0 голосов
/ 13 января 2019

Я ломал голову над тем, как это сделать, но не могу найти решение. Надеюсь, стек поможет.

У меня есть ситуация, когда идентификатор (назовем его идентификатором объекта - OID):

1) Используется для отслеживания цепочки транзакций; 2) Не гарантируется быть уникальным вне 5-минутного интервала.

На английском языке «Я хочу получить все документы, которые: (имеют oid1 с данными между временем x и y) ИЛИ (имеют oid2 с данными между временем w и z) ИЛИ ...»

Поскольку я имею дело с большим количеством данных (и хочу избежать выполнения 1 запроса на OID), я хотел бы получить список OID, установить ограничение по времени для каждого из них, а затем запросить ES в один раз. Я думал, что смогу сделать это:

    {
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "oid": "12ac419512ac4195"
          },

          "range": {
            "startTime": {
              "from": "2019-01-04T21:31:00.000Z",
              "to": "2019-01-04T21:34:00.000Z"
            }
          }

        },

        {
          "match_phrase": {
            "oid": "34df261834df2618"
          },

          "range": {
            "startTime": {
              "from": "2019-01-04T21:35:00.000Z",
              "to": "2019-01-04T21:40:00.000Z"
            }
          }

        }

      ],
      "minimum_should_match": 1
    }
  }
}

Это работает нормально, пока я убираю время («Я хочу получить oid1 или oid2 или oid2»), но с временным диапазоном, похоже, ES не радует.

Есть ли способ сделать это? Или я придерживаюсь одного запроса на OID.

1 Ответ

0 голосов
/ 14 января 2019

Вам нужен еще один подуровень выражения bool + must, чтобы связать диапазон match +.

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "match_phrase": {
                  "oid": "12ac419512ac4195"
                }
              },
              {
                "range": {
                  "startTime": {
                    "from": "2019-01-04T21:31:00.000Z",
                    "to": "2019-01-04T21:34:00.000Z"
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "match_phrase": {
                  "oid": "34df261834df2618"
                }
              },
              {
                "range": {
                  "startTime": {
                    "from": "2019-01-04T21:35:00.000Z",
                    "to": "2019-01-04T21:40:00.000Z"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
...