Мои документы представляют заказ в указанном формате:
{
"name", // the client
"sku" // the product
}
Итак, предположим, что существуют следующие данные:
{ "name": "rudolph", "sku": "apple" }
{ "name": "rudolph", "sku": "apple" }
{ "name": "rudolph", "sku": "apple" }
{ "name": "john", "sku": "banana" }
{ "name": "john", "sku": "banana" }
{ "name": "paul", "sku": "banana" }
{ "name": "paul", "sku": "apple" }
{ "name": "peter", "sku": "banana" }
Я могу получить клиентов, которые купили только 1 видэлемент с запросом:
{
"aggs": {
"clients": {
"terms": {
"field": "name"
},
"aggs": {
"distinct_sku": {
"cardinality": {
"field": "sku"
}
},
"unique_sku": {
"bucket_selector": {
"buckets_path": {
"qty": "distinct_sku"
},
"script": "params.qty == 1"
}
},
"aggs": {
"terms": {
"field": "sku"
}
}
}
}
},
"size": 0
}
, что приводит к
{
...
"aggregations": {
"clients": {
...
"buckets": [
{
"key": "rudolph",
"doc_count": 3,
...
"aggs": {
...
"buckets": [
{
"key": "apple",
"doc_count": 3
}
]
}
},
{
"key": "john",
"doc_count": 2,
...
"aggs": {
...
"buckets": [
{
"key": "banana",
"doc_count": 2
}
]
}
},
{
"key": "peter",
"doc_count": 1,
...
"aggs": {
...
"buckets": [
{
"key": "banana",
"doc_count": 1
}
]
}
}
]
}
}
}
Можно управлять запросом, чтобы вернуть количество каждого элемента в результате?
Что-то вродеthis: {"apple": 1, "banana": 2}
Заранее спасибо.
EDIT
В моей базе огромное количество клиентов инебольшое количество продуктов, так что:
- Выполните итерации по вышеуказанному результату агрегации, чтобы получить требуемый результат, не вариант.
- Если мне нужно отправить запрос для каждого продукта,Это нормально.