Как выполнить субагрегацию, которая будет вычислять поля без значения для каждого сегмента? - PullRequest
0 голосов
/ 06 февраля 2020

В настоящее время создается следующий запрос \ агрегат Elasticsearch 6.8:

{
  "sort": [
    {
      "DateCreated": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "InternalEntityId": "ExampleValue1111"
          }
        },
        {
          "match": {
            "Direction": "Inbound"
          }
        }
      ]
    }
  },
  "aggs": {
    "top_ext": {
      "terms": {
        "field": "ExternalAddress.keyword"
      },
      "aggs": {
        "top_date": {
          "top_hits": {
            "sort": [
              {
                "DateCreated": {
                  "order": "desc"
                }
              }
            ],
            "size": 1
          }
        }
      }
    }
  }
}

Как мы выполняем (в том же поиске):

  • Подсчитать сумму (попаданий в корзину ), которые имеют нет значения (стиль запроса must_not существует) PER bucket

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

Спасибо!

1 Ответ

0 голосов
/ 06 февраля 2020

Теперь вы можете сделать две вещи здесь: 1. Либо отсортируйте группу агг терминов "top_ext" как c порядок подсчета do c, и вы можете использовать верхние n блоков нулевого размера здесь 2. Вы можете применить агрегация селектора сегментов параллельно с вашими внутренними попаданиями, так что будут отображаться только те внутренние совпадения, которые имеют нулевые значения docCounts.

Вот запрос dsl, который использует оба вышеуказанных подхода. (Вы можете подключить все остальные необходимые элементы запроса, я сосредоточился в основном на части агрегации здесь)

GET kibana_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "outer": {
      "terms": {
        "field": "products.category.keyword",
        "size": 10,
        "order": {
          "_count": "asc"
        }
      },
      "aggs": {
        "inner": {
          "top_hits": {
            "size": 10
          }
        },
        "restrictedBuckets": {
          "bucket_selector": {
            "buckets_path": {
              "docCount": "_count"
            },
            "script": "params.docCount<1"
          }
        }
      }
    }
  }
}
...