Elasticsearch postfiler 取消过滤器

Elasticsearch postfiler cancel filter

在以下查询中,我想将查询结果过滤为 size mediumcolor blue 但我希望聚合忽略 color blue 已应用。

{
  "query":{
      "bool" {
          "must": {
              "query_string": {
                  "query": "foo"
              }
          },
          "should": {
              // deferred
          }
      }
  },
  "filter": {
      "term": {"size": "m"}
  },
  "aggregations": { 
     // deferred
  },
  "post_filter":{
      "term":{"color":"blue"}
  }
}

问题是只要 post_filter 存在,size filter 就不再对查询结果产生任何影响。我错过了什么?

编辑:弹性搜索版本 1.5.1

您使用的是哪个版本的elasticsearch?

如果您希望在聚合中考虑某个过滤器,它应该在查询范围内(因此使用过滤查询),任何其他过滤器都被认为在查询范围之外,因此不会被考虑用于聚合计数但会影响最终输出。

更改查询如下:

{
    "query": {
        "filtered": {
            "query": {
                "bool": {
                    "must": {
                        "query_string": {
                            "query": "foo"
                        }
                    },
                    "should": {
                        //deferred
                    }
                }
            },
            "filter": {
                "term": {
                    "size": "m"
                }
            }
        }
    },
    "aggregations": {
        //deferred
    },
    "post_filter": {
        "term": {
            "color": "blue"
        }
    }
}

这将仅汇总 size:m 的结果,但最终结果将汇总 color:bluesize:m

您的过滤器充当 post_filter,即它被后续 post_filter 覆盖。

您应该有一个涵盖尺码和颜色的 post_filter(如果您希望将这些从聚合中排除)或将尺码筛选器移动到筛选查询中:

"query": {
 "filtered": {
   "query":{
     "bool" {
        "must": {
          "query_string": {
              "query": "foo"
          }
      },
      "should": {
          // deferred
      }
    }
  },
  "filter" : {
    "term": {"size": "m"}
  }
 }
}