Агрегатор ElasticSearch с сортировкой по тексту / ключевому слову

Marcelo Ribeiro спросил: 12 мая 2018 в 03:45 в: ruby-on-rails

У меня есть поиск elasticsearch для поиска по вариантам каталога продуктов. В основном, где:

Продукт has_many variantsVariant принадлежит_от продукту

И вариант json / mapping индекса содержит имя продукта.

Я пытаюсь искать варианты, сгруппированные по id продукта, размер ведра 1. Я могу это сделать и сортировать по минимальной цене, максимальной цене и т. д.

Это работает:

POST /variants/_search?size=0
{
    "aggs" : {
        "min_price" : { "min" : { "field" : "price" } }
    }
}

Это (вроде), что мне нужно:

POST /variants/_search?size=0
{
    "aggs" : {
        "product_name" : { "sort by product_name asc / desc" }
    }
}

Моя последняя задача - сортировать их по алфавиту, но я, похоже, не могу сортировать по полю ключевого слова (asc / desc ) с использованием агрегатора.


1 ответ

Есть решение
Ryan Widmaier ответил: 12 мая 2018 в 04:37

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

GET /variants/_search
{
    "size": 0,
    "aggs" : {
        "product_name" : {
            "terms" : {
                "field" : "product_name",
                "size": 1000,
                "order" : { "_key" : "asc" }
            }
        }
    }
}

Ссылка: https://www.elastic .co / гид / ен / elasticsearch / справочник / ток / поиск-агрегаций-ковшеобразные-термы-aggregation.html # поиск-агрегирование-ковшеобразные-термы-агрегации порядка

Marcelo Ribeiro ответил: 13 мая 2018 в 12:53
Кажется, это не разрешено для дочерних агрегаторов, но работает на корневом уровне. Благодарю.
Marcelo Ribeiro ответил: 12 мая 2018 в 10:22
Кажется, это не работало. Я получаю странную ошибку: Недопустимый путь заказа агрегации [product_name]. Ковши могут быть отсортированы только по пути суб-агрегатора, который построен из нуля или более агрегатов с одним буфером в пути и окончательного однобайтового или агрегирования показателей на конце пути