Условная сортировка в ElasticSearch

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

возможно ли это в ElasticSearch? Если да, то не могли бы вы предложить какую-либо литературу или подход.

дата имеет тип " дата "и формат"dateOptionalTime".

спасибо

2 ответов


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

мое предпочтение было бы для сценария подсчета очков, потому что "оценка на основе сценария" будет быстрее (согласно документации).

используя скрипт подсчета очков, вы можете использовать метку времени Unix для поля даты типа int/long и скрипт сортировки mvel в custom_score запрос. Возможно, Вам потребуется переиндексировать документы. Вам также нужно будет иметь возможность конвертировать искал время в метке времени Unix, чтобы перекачать его в ElasticSearch.

скрипт сортировки затем вычитает запрошенную метку времени из метки времени каждого документа и сделает абсолютное значение. Затем результаты сортируются в порядке возрастания - наименьшее "расстояние" является лучшим.

поэтому при поиске документов, датированных примерно годом назад, это будет выглядеть примерно так:

"query": {
    "custom_score" : {
        "query" : {
            ....
        },
        "params" : {
            "req_date_stamp" : 1348438345,
        },
        "script" : "abs(doc['timestamp'].value - req_date_timestamp)"
    }
},
"sort": {
    "_score": {
        'order': 'asc'
    }
}

(извиняюсь за любые ошибки в моем JSON - я протестировал эту идею в pyes)

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

для "полной" информации вы можете проверить пользовательские Score Query docs и перейдите по ссылке на сценарий MVEL.


для такого рода конкретных случаев использования следует использовать сценарий сортировки.

см. раздел "сортировка на основе скриптов" в сортировка документации