Как сделать И / ИЛИ в Агрегации фильтров - PullRequest
0 голосов
/ 26 апреля 2020

В https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html мы узнаем:

{
    "aggs" : {
        "t_shirts" : {
            "filter" : { "term": { "type": "t-shirt" } }
        }
    }
}

Приведенный выше код показывает, как мы можем аггить за футболку, но как мы можем:

{
    "aggs" : {
        "t_shirts_or_shorts" : {
            "filter" : { "term": { "type": "t-shirt" } OR "term": { "type": "shorts" } }
        }
    }
}

и

{
    "aggs" : {
        "black_t_shirts" : {
            "filter" : { "term": { "type": "t-shirt" } AND "term": { "color": "black" } }
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 26 апреля 2020

В агрегации фильтров можно использовать операторы must и must как для запроса.

Query1:

{
  "size": 0, 
  "aggs": {
    "t_shirts": {
      "filter": {
        "bool": {
          "should": [
            {
              "term": {
                "type.keyword": "t-shirt"
              }
            },
            {
              "term": {
                "type.keyword": "shorts"
              }
            }
          ]
        }
      }
    }
  }
}

Query2:

{
  "size": 0, 
  "aggs": {
    "t_shirts": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "type.keyword": "t-shirt"
              }
            },
            {
              "term": {
                "color.keyword": "black"
              }
            }
          ]
        }
      }
    }
  }
}
0 голосов
/ 26 апреля 2020

Вы можете комбинировать критерии фильтрации, используя тег bool, так же, как вы можете запрашивать предложения. Вы также можете проверить это: Несколько фильтров и агрегат вasticsearch

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