Как исключить термины во вложенной составной агрегации - PullRequest
0 голосов
/ 09 мая 2019

Я использую составную агрегацию для вложенных полей вasticsearch, но я хочу исключить некоторые термины из результата.

Эта агрегация работает:

{
  "size": 0,
  "geo": {
    "communication": {
      "nested": {
        "path": "geo"
      },
      "aggs": {
        "table": {
          "composite": {
            "size": 1000,
            "sources": [
              {"stk1": {"terms": {"field": "geo.src"}}},
              {"stk2": {"terms": {"field": "geo.dest"}}}
            ]
          }
        }
      }
    }
  }
}

Но я хочу исключить некоторые термины из stk2,

{
  "size": 0,
  "aggs": {
    "geo": {
      "nested": {
        "path": "geo"
      },
      "aggs": {
        "table": {
          "composite": {
            "size": 1000,
            "sources": [
              {"stk1": {"terms": {"field": "geo.src"}}},
              {"stk2": {"terms": {"field": "geo.dest", "exclude":"cancel"}}}
            ]
          }
        }
      }
    }
  }
}

Приведенный выше запрос не работает.

ОБНОВЛЕНИЕ 1: В результате должны быть пропущены только элементы массива, а не весь документ, содержащий «отмена».

Я использую эластичный v6.7

1 Ответ

0 голосов
/ 09 мая 2019

Я бы предложил использовать запрос для исключения этих документов:

{
  "size": 0,
  "aggs": {
    "geo": {
      "nested": {
        "path": "geo"
      }
    },
    "aggs": {
      "filter": {
        "bool": {
          "must_not": {
            "prefix": {
              "geo.dest": "cancel"
            }
          }
        }
      },
      "aggs": {
        "table": {
          "composite": {
            "size": 10,
            "sources": [
              {
                "stk1": {
                  "terms": {
                    "field": "geo.src"
                  }
                }
              },
              {
                "stk2": {
                  "terms": {
                    "field": "geo.dest"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}
...