Как получить сумму всех doc_counts из запроса агрегации терминов вasticsearch? - PullRequest
0 голосов
/ 19 февраля 2019

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

Вот так я могу получить дублирующие отзывы для каждого свойства

  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "reviewKeyword": {
              "value": ""
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "propertyGrouping": {
      "terms": {
        "field": "propertyId",
        "size": 10
      }
      , "aggs": {
        "dupReviwes": {
          "terms": {
            "field": "reviewKeyword",
            "size": 100
          }
        }
      }
    }
  }

. Теперь мне также нужна суммаколичество документов, возвращаемых субагрегацией.Это пример ответа

{
  "buckets": [
    {
      "key": 532,
      "doc_count": 2431,
      "dupReviwes": {
        "doc_count_error_upper_bound": 10,
        "sum_other_doc_count": 2382,
        "buckets": [
          {
            "key": "Good hotel",
            "doc_count": 31
          },
          {
            "key": "Overall good",
            "doc_count": 18
          }
        ]
      }
    },
    {
      "key": 496,
      "doc_count": 2207,
      "dupReviwes": {
        "doc_count_error_upper_bound": 8,
        "sum_other_doc_count": 2185,
        "buckets": [
          {
            "key": "Good",
            "doc_count": 16
          },
          {
            "key": "Nice",
            "doc_count": 6
          }
        ]
      }
    }
  ]
}

Так что я также хочу получить сумму подсчетов документов на одну корзину для вышеприведенного случая: для двух ключей

Key : 532
sum_doc_count=49 (31+18)

key : 496
sum_doc_count=32 (16 + 6)

возможно ли это с некоторыми запросами

1 Ответ

0 голосов
/ 19 февраля 2019

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

{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "reviewKeyword": {
              "value": ""
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "propertyGrouping": {
      "terms": {
        "field": "propertyId",
        "size": 10
      },
      "aggs": {
        "dupReviews": {
          "terms": {
            "field": "reviewKeyword",
            "size": 100
          }
        },
        "sum_buckets": {
          "sum_bucket": {
            "buckets_path": "dupReviews>_count"
          }
        }
      }
    }
  }
}
...