嵌套类型上的Elasticsearch post_filter不过滤聚合

时间:2017-07-07 16:17:36

标签: elasticsearch elasticsearch-5

你好Elasticsearch大师,我需要你的帮助! 我们正在使用Elasticsearch v5.4和 我在elasticsearch中有多个嵌套类型:

"testLookup" : [
  {
    "id": 1001,
    "name": "test1"
  },
  {
    "id": 1002,
    "name": "test2"
  }
]

我正在尝试将名称显示为过滤器中的复选框选项。

我试图使用post_filter顶级元素来基本过滤聚合,这样我就可以更新和显示受影响的过滤器选项,有点像它在这个演示站点上的使用方式:http://demo.searchkit.co

  "post_filter": {
    "bool":{
      "must": [
     {    
      "nested" : {
        "path" : "testLookup",
        "query": {
          "bool": {
            "filter":{ 
              "bool":{
                "should":[
                        { "term":  { "perTestLookup.name.keyword": "Adele"}}
         ]
            }
        }
      }
    }
    }
     },
              {    
    "nested" : {
      "path" : "testLookup2",
      "query": {
        "bool": {
          "filter":{ 
            "bool":{
              "should":[         
                { "term":  { "perTestLookup2.name.keyword": "Gene" }}
         ]
            }
        }
      }
    }
    }     
    }
  ]
 }
}

如果我没有弄错,我认为post_filter所做的是在发送搜索请求之前为每个聚合应用过滤器,您可以通过查看搜索过滤器的请求有效负载后查看过滤器复选框。

但是,我无法让post_filter将过滤器应用于聚合,只是没有应用过滤器。为什么会这样?是不支持嵌套类型的post_filter?

任何提示或指导将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

注意:我没有任何搜索工具包经验。

在计算聚合之后执行Elasticsearch请求中的post_filter以进一步降低命中结果。请参阅有关post_filter的文档。

这背后的想法是这样一个事实:在分面搜索中(即想象按类别过滤),您仍然希望检索聚合中所有类别的类别计数,但是您希望过滤您所在类别中的所选类别您正在搜索的文件。

所以这是Elasticsearch视角下的预期行为。