Elasticsearch - Найти все уникальные значения для поля в агрегации - PullRequest
0 голосов
/ 15 апреля 2020

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

[
  {
    "payment": "cash",
    "client_name": "john"
  },
  {
    "payment": "cash",
    "client_name": "bob"
  },
  {
    "payment": "visa",
    "client_name": "alis"
  },
  {
    "payment": "mastercard",
    "client_name": "matt"
  },
  {
    "payment": "visa",
    "client_name": "john"
  }
]

Я хочу агрегировать продажи по методу оплаты, поэтому я агрегирую terms payment:

GET /_search
{
  "size": 0,
  "aggs": {
    "payment_method": {
      "terms": {
        "field": "payment"
      }
    }
  }
}

И мой ответ будет выглядеть так:

  "aggregations" : {
    "payment_method" : {
      "buckets" : [
          {
          "key": "visa",
          "doc_count": 2
        },
          {
          "key": "cash",
          "doc_count": 2
        },
          {
          "key": "mastercard",
          "doc_count": 1
        }
      ]
    }
  }

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

  "aggregations" : {
    "payment_method" : {
      "buckets" : [
          {
          "key": "visa",
          "doc_count": 2,
          "client_names": ["alis", "john"]
        },
          {
          "key": "cash",
          "doc_count": 2,
          "client_names": ["john", "bob"]
        },
          {
          "key": "mastercard",
          "doc_count": 1,
          client_names: ["matt"]
        }
      ]
    }
  }

Возможно ли это определенным образом?

Я знаю, что могу подгруппировать по "client_name", но я хочу сгладить таким образом.

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

...