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

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

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

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

Спасибо


person Javid Al Karuzi    schedule 23.09.2013    source источник


Ответы (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)

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

Для получения полной информации вы можете проверить документы Custom Score Query и перейдите по ссылке на скрипты MVEL.

person jamesc    schedule 25.09.2013

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

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

person mguillermin    schedule 23.09.2013