Как я могу отфильтровать значение doc_count, которое является результатом вложенной агрегации - PullRequest
1 голос
/ 14 марта 2019

Как я могу отфильтровать значение doc_count, которое является результатом вложенной агрегации?Вот мой запрос:

    "aggs": {
            "CDIDs": {
              "terms": {
                "field": "CDID.keyword",
                "size": 1000
              },
              "aggs": {
                "my_filter": {
                  "filter": {
                    "range": {
                      "transactionDate": {
                        "gte": "now-1M/M"
                      }
                    }
                  }
                },
                "in_active": {
                  "bucket_selector": {
                    "buckets_path": {
                      "doc_count": "_count"
                    },
                    "script": "params.doc_count > 4"
                  }
                }
              }
            }
          }

Результат запроса выглядит следующим образом:

      {
          "aggregations" : {
            "CDIDs" : {
              "doc_count_error_upper_bound" : 0,
              "sum_other_doc_count" : 2386,
              "buckets" : [
                {
                  "key" : "1234567",
                  "doc_count" : 5,
                  "my_filter" : {
                    "doc_count" : 4
                  }
                },
                {
                  "key" : "12345",
                  "doc_count" : 5,
                  "my_filter" : {
                    "doc_count" : 5
                  }
                }
              ]
            }
          }
        }

Я пытаюсь отфильтровать второе значение doc_count здесь.Допустим, я хочу, чтобы документы были> 4, поэтому в результате должен быть только один результат агрегации в сегменте с doc_count = 5. Может кто-нибудь помочь, как я могу сделать этот фильтр?Пожалуйста, дайте мне знать, если требуется дополнительная информация.

1 Ответ

1 голос
/ 14 марта 2019

Внимательно посмотрите на агрегацию bucket_selector . Вам просто нужно указать имя агрегации в buckets_path разделе, т.е. "doc_count":"my_filter>_count"

Агрегация конвейеров (buckets_path) имеет свой собственный синтаксис, где > действует как разделитель. Обратитесь к этому LINK за дополнительной информацией об этом

Запрос агрегации

POST <your_index_name>/_search
{  
   "size":0,
   "aggs":{  
      "CDIDs":{  
         "terms":{  
            "field":"CDID.keyword",
            "size":1000
         },
         "aggs":{  
            "my_filter":{  
               "filter":{  
                  "range":{  
                     "transactionDate":{  
                        "gte":"now-1M/M"
                     }
                  }
               }
            },
            "in_active":{  
               "bucket_selector":{  
                  "buckets_path":{  
                     "doc_count":"my_filter>_count"
                  },
                  "script":"params.doc_count > 4"
               }
            }
         }
      }
   }
}

Надеюсь, это поможет!

...