Elasti c Фильтр поисковых запросов и сортировка по дате - PullRequest
0 голосов
/ 12 апреля 2020

Предположим, что каждый день 100 (некоторое произвольное число) записей индексируются ежедневно в elasti c с полем в качестве rundate. Теперь при запросе elasti c можем ли мы сформировать запрос elasti c, который выдает последние данные runDate.

Например:

все записи находятся под одним индексом.

{"runDate": "11: 04: 2020" .....} {"runDate" : "11: 04: 2020" .....} .. * 100 записей аналогично.

{"runDate": "12: 04: 2020" ......} {"runDate" : "12: 04: 2020" ......} .. * 150 записей аналогичным образом.

Запрос должен вернуться.

{"runDate": "12: 04: 2020" ......} {"runDate": "12: 04: 2020" ......} .. * 150 записей аналогично.

Одно решение / на основе двух запросов.

  1. Получить самую последнюю дату, применив sort и size = 1 (Возврат 12: 04: 2020).
  2. Применить запрос на совпадение для даты (12: 04: 2020) с шага 1.

Можем ли мы сделать это лучше всего одним запросом.

Спасибо за помощь!

1 Ответ

0 голосов
/ 13 апреля 2020

1. Если вам известно количество записей, вы можете использовать один запрос.

Сортировать по rundate и извлекать n записей

GET <indexname>/_search
{
  "from": 0,
  "size": 3,  --> n records
  "sort": [
    {
      "runDate": {
        "order": "desc"
      }
    }
  ]
}

2. Если вы пытаетесь получить записи, превышающие текущую дату

GET <indexname>/_search
{
  "query": {
    "range": {
      "runDate": {
        "gte": "now/d" --> now-1d/d from yesterday, other calculations are available
      }
    }
  }, 
  "from": 0,
  "size": 3, 
  "sort": [
    {
      "runDate": {
        "order": "desc"
      }
    }
  ]
}

3. Получить максимальную дату и использовать ее для запроса на эту дату

{
  "size": 0, 
  "aggs": {
    "max_date": {
      "max": {
        "field": "runDate"
      }
    }
  }
}
...