Filter 如果没有使用刻面过滤器返回刻面,elasticsearch能否返回所有刻面?
我目前正在使用elasticsearch与rubberband gem结合,对在线目录中的项目进行索引。我的用例如下所示: 一个项目可以有多个子项目,例如一本包含多个故事的漫画书。这些故事在items文档中作为嵌套文档编制索引,并具有三个特定功能。故事:Filter 如果没有使用刻面过滤器返回刻面,elasticsearch能否返回所有刻面?,filter,
elasticsearch,facet,Filter,
elasticsearch,Facet,我目前正在使用elasticsearch与rubberband gem结合,对在线目录中的项目进行索引。我的用例如下所示: 一个项目可以有多个子项目,例如一本包含多个故事的漫画书。这些故事在items文档中作为嵌套文档编制索引,并具有三个特定功能。故事: 有一个或多个编写器 有一个或多个插图画家 是一个意甲的一部分,或者没有或有多个英雄 我正在这三个特性上应用facet,如果用户提供了搜索词,我将添加facet过滤器。给定的搜索项也用于查询整个索引。有时,用户正在搜索漫画书中的特定故事。如果
- 有一个或多个编写器
- 有一个或多个插图画家
- 是一个意甲的一部分,或者没有或有多个英雄
- 如果给定的搜索词在应用于facet过滤器时返回facet,那么我假设用户正在搜索漫画书中的故事,并且facet可以返回
- 如果给定的搜索词在应用于facet过滤器时没有返回facets,那么我假设用户正在搜索漫画书本身,必须删除过滤器才能返回facets
我想知道在elasticsearch中,如果没有面返回,是否有可能告诉面过滤器删除自身 您可以简单地将每个方面添加两次,一次使用方面过滤器,一次不使用?我正在阅读两个问题,以回答第一个问题:如果您想返回计数为零的方面,您可以在查询中使用
all\u terms:true
,如本例所示(取自):
(此解决方案要求您有权访问原始查询。如果它隐藏在rubberband gem的某些逻辑后面,您必须检查是否可以在那里设置此属性。)
我担心第二个问题的假设解决方案(“如果没有面返回,是否有可能让面过滤器自行删除”)将很难确定实际结果和结果,尽管一开始没有这是一种可能的解决方案。只是问题比我描述的要复杂一点。在让一些用户测试之后,结果表明,在某些情况下,当用户搜索漫画而不是漫画中的故事时,返回了一个带有过滤器的方面。我必须寻找一些其他标准来决定用户何时搜索漫画书或漫画书中的故事。
{
"query" : {
"match_all" : { }
},
"facets" : {
"tag" : {
"terms" : {
"field" : "tag",
"all_terms" : true
}
}
}
}