Эластичная агрегация один результат - PullRequest
0 голосов
/ 22 марта 2019

Я хочу сгруппировать по свойству и получить только самый дешевый результат в результате.

Когда у меня есть следующая информация в индексе упругости:

Имя | цена | Тип

  • медведь | 15 | животное
  • бал | 4 | игрушка
  • утка | 10 | животное
  • медведь | 13 | животное
  • кукла | 16 | игрушка
  • собака | 20 | животное

Я бы хотел следующее как результат

Имя | цена | тип

  • утка | 10 | животное
  • бал | 4 | игрушка

Я пытался получить такой результат с помощью следующего запроса:

    {
        "aggregations": {
            "aggregation_1": {
                "terms": {
                    "field": "type.keyword",
                    "order": {
                        "price_min": "desc"
                    },
                        "size": 5
                },
                "aggregations": {
                    "price_min": {
                        "min": {
                            "field": "price"
                        }
                    }

                }
            }
        },
        "size": 10
    }

Но результаты этого запроса возвращают все элементы, является ли агрегация неправильным методом для получения того, что я хочу?

1 Ответ

2 голосов
/ 22 марта 2019

Вы хотите сделать это так, то есть для каждого типа продукта найдите хит с наименьшей ценой:

{
  "size": 0,
  "aggregations": {
    "aggregation_1": {
      "terms": {
        "field": "type.keyword",
        "size": 5
      },
      "aggregations": {
        "cheapest": {
          "top_hits": {
            "size": 1,
            "sort": {
              "price": "asc"
            }
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...