Преобразование из SQL в запрос elasticsearch

Нуб в Elasticsearch, нужна помощь с запросом. У меня есть следующий SQL-запрос, который мне нужно преобразовать в запрос к Elasticsearch.

SELECT COUNT(*) 
FROM table 
WHERE Message LIKE '%Communication  has failed.%'
  AND [Date] > CONVERT( CHAR(8), GetDate(), 112) + ' 07:40:00'
  AND [Date] < CONVERT( CHAR(8), GetDate(), 112) + ' 22:15:00'

Я хочу выполнить запрос к elasticsearch с помощью curl, и мне нужна помощь в составлении запроса.

[Date] равно @timestamp в документе Elasticsearch. Также было бы неплохо, если бы синтаксис эластичного запроса имел эквивалент getdate() для текущих данных.


person flalar    schedule 19.01.2018    source источник


Ответы (1)


Самый простой способ получить количество всех результатов — использовать поле hits в наборе результатов. Если вы хотите этого, ваш запрос будет:

POST /my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": "*Communication  has failed*"
          }
        },
        {
          "range": {
            "my_date_field": {
              "gte": "01/01/2018",
              "lt": "01/02/2018",
              "format": "dd/MM/yyyy"
            }
          }
        }
      ]
    }
  },
  "size": 0
}

Обратите внимание, что я делаю запрос диапазона для date и запрос соответствия для message. Я также установил size на ноль, потому что я хочу вернуть только значения hits. Результат будет выглядеть следующим образом:

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 346,
    "max_score": 0,
    "hits": []
  }
}

Вы также можете использовать агрегированный запрос, но в этом случае вы захотите агрегировать по одному полю, и результат агрегирования будет таким же, как значение поля совпадений. Подумайте об агрегате, подобном функции GROUP BY в SQL. Если бы вы были только в GROUP BY одной группе, то ваша группа была бы равна значению COUNT(*). Если вы хотите узнать больше об агрегатах, документация находится здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-valuecount-aggregation.html.

person EricPSU    schedule 19.01.2018