你好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?
任何提示或指导将不胜感激。谢谢!
答案 0 :(得分:0)
注意:我没有任何搜索工具包经验。
在计算聚合之后执行Elasticsearch请求中的post_filter
以进一步降低命中结果。请参阅有关post_filter的文档。
这背后的想法是这样一个事实:在分面搜索中(即想象按类别过滤),您仍然希望检索聚合中所有类别的类别计数,但是您希望过滤您所在类别中的所选类别您正在搜索的文件。
所以这是Elasticsearch视角下的预期行为。