我目前正在将elasticsearch与rubberband gem结合使用来索引在线目录中的项目。我的用例如下:
一个项目可以有多个子项目,例如一本有多个故事的漫画书。这些故事在项目文档中被编入索引作为嵌套文档,并具有三个特定功能。一个故事:
我正在对这三个功能应用facet,如果用户提供了搜索词,我会添加一个facet过滤器。给定的搜索词也用于查询整个索引。有时用户正在搜索漫画书中的特定故事。如果是这样的话,我希望这些方面能够回归作家,插画家和那些特定故事的系列,而不是整本漫画书的各个方面,但是没有办法提前知道这一点。用户只填写搜索词,并且不区分搜索漫画书或搜索故事。我已经想到了以下这个问题的解决方案:
我想知道如果没有返回facet,弹性搜索是否有可能告诉facet过滤器自行删除?
答案 0 :(得分:0)
您可以简单地将每个方面添加两次,一次使用构面过滤器,一次不使用?
答案 1 :(得分:0)
我正在阅读两个问题,回答第一个问题:如果你想返回零计数的方面,你可以在查询中使用all_terms: true
,就像在这个例子中一样(取自{{3 }}):
{
"query" : {
"match_all" : { }
},
"facets" : {
"tag" : {
"terms" : {
"field" : "tag",
"all_terms" : true
}
}
}
}
(此解决方案要求您可以访问原始查询。如果隐藏在rubberband gem的某些逻辑后面,您必须检查是否可以在那里设置此属性。)
我担心你的第二个问题的假设解决方案(“如果没有返回任何方面,是否有可能告诉方面过滤器自行删除”)将使得很难确定实际结果和结果,虽然首先没有。