Как вы можете отсортировать по меньшей из двух дат в Elasticsearch? - PullRequest
0 голосов
/ 09 февраля 2019

Сценарий: у меня есть данные с двумя полями даты (created_at и published_on).В некоторых случаях даты не являются правильными, и мне нужно отсортировать по меньшей (более старой) из двух дат.

Другими словами, для каждого элемента определите более старую дату, а затем используйте ее длясортировать по.

Из документации видно, что вы можете сортировать по полям «последовательно» (например, сортировать по имени, а затем сортировать по городу), и я вижу некоторые числовые параметры сортировки (мин. / макс. и т. д.),Но я борюсь с тем, как этого добиться.

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

Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2019

Вам нужно извлечь одно значение из двух полей, а затем отсортировать на основе этого значения.Для этого вам понадобится сценарий на основе сортировки .В вашем запросе dsl вы должны добавить параметр сортировки, как показано ниже:

{
  "sort": {
    "_script": {
      "type": "number",
      "script": {
        "source": "if(doc['created_at'].value.getMillis() < doc['published_on'].value.getMillis()) { return doc['created_at'].value.getMillis(); } else { return doc['published_on'].value.getMillis(); }",
        "lang": "painless"
      },
      "order": "desc"
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...