Elasticsearch 5: сортировка по цене ближайшего оптового продавца

У меня есть вложенный документ продукта, содержащий список цен, связанных с разными оптовиками. Вот пример документа:

{
    "sku": "065879",
    "name": "My product",
    "price": [
        {
            "wholesaler": "1",
            "location": "drm3btev3",
            "price": "12.34"
        },
        {
            "wholesaler": "2",
            "location": "gbsuv7ztq",
            "price": "45.67"
        },
    ]
}

Каков правильный запрос для получения списка документов, отсортированных по цене, с использованием только самой близкой цены для каждого документа с учетом географической точки клиента?

Заранее спасибо!


person LittleBigDev    schedule 04.06.2019    source источник


Ответы (1)


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

Затем следует во вложенный фильтр сортировки добавить скрипт-запрос, который будет определять ближайшего оптовика. Проблема в том, что вы не можете безболезненно работать с геохешем. Но если вы преобразуете свой геохеш в тип данных геоточки, вы сможете использовать функции расстояния скрипта (например, здесь )

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

Но я понятия не имею о влиянии на производительность и подробной реализации.

Удачи !

person Pierre Mallet    schedule 04.06.2019
comment
Хэш был дан для удобства редакции. Нет ограничений на поле местоположения. Я посмотрю на вложенную сортировку и вложенный фильтр, но не уверен, что это будет соответствовать моим потребностям. Когда я рылся в Интернете, я нашел кое-что о запросе оценки функции. Что вы думаете ? - person LittleBigDev; 04.06.2019
comment
функция score query не позволит отсортировать по цене ближайшего оптовика. Но это может позволить вам сортировать по сочетанию цены и расстояния, см. здесь elastic.co/guide/en/elasticsearch/guide/current/ - person Pierre Mallet; 04.06.2019
comment
Спасибо за эту ссылку. Я думаю, что запрос оценки функции - это не то, что мне нужно; Мне не нужен настраиваемый спад. Либо это слишком хорошая цена для сортировки, либо нет. Я выберу вложенную сортировку + вложенный фильтр. - person LittleBigDev; 05.06.2019