Elasticsearch работает на совокупном уровне - продукты, купленные клиентами, которые покупают только этот продукт - PullRequest
0 голосов
/ 21 февраля 2019

Мои документы представляют заказ в указанном формате:

{
   "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
В моей базе огромное количество клиентов инебольшое количество продуктов, так что:

  1. Выполните итерации по вышеуказанному результату агрегации, чтобы получить требуемый результат, не вариант.
  2. Если мне нужно отправить запрос для каждого продукта,Это нормально.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...