0

我目前正在结合使用 elasticsearch 和橡皮筋 gem 来索引在线目录中的项目。我的用例如下:

一个项目可以有多个子项目,例如其中包含多个故事的漫画书。这些故事在 items 文档中被索引为嵌套文档,并具有三个特定功能。一个故事:

  • 有一个或多个作家
  • 有一名或多名插画师
  • 是系列的一部分或有零个或多个英雄。

如果用户给出了搜索词,我将在这三个功能上应用构面,并添加构面过滤器。给定的搜索词也用于查询整个索引。有时,用户正在搜索漫画书中的特定故事。如果是这样,我希望这些方面返回那个特定故事的作家、插画家和系列,而不是整个漫画书的方面,但没有办法提前知道这一点。用户只需填写搜索词,不区分搜索漫画书还是搜索故事。对于这个问题,我想到了以下解决方案:

  • 如果给定的搜索词在应用于构面过滤器时返回构面,那么我假设用户正在搜索漫画书中的故事并且可以返回构面
  • 如果给定的搜索词在应用于构面过滤器时没有返回构面,那么我假设用户正在搜索漫画书本身,并且必须删除过滤器才能返回构面。

我想知道弹性搜索中是否有可能告诉分面过滤器在没有返回分面的情况下自行删除?

4

2 回答 2

0

我正在阅读两个问题,以回答第一个问题:如果您也想返回零计数的构面,您可以all_terms: true在查询中使用,如本例中(取自elasticsearch 参考):

{
    "query" : {
        "match_all" : {  }
    },
    "facets" : {
        "tag" : {
            "terms" : {
                "field" : "tag",
                "all_terms" : true
            }
        }
    }
}

(此解决方案要求您可以访问原始查询。如果它隐藏在橡皮筋宝石的某些逻辑后面,您必须检查是否可以在此处设置此属性。)

恐怕您的第二个问题的假设解决方案(“如果没有返回任何方面,是否有可能告诉分面过滤器自行删除”)将难以确定实际结果结果,尽管在第一名

于 2013-10-30T18:49:30.783 回答
0

您可以简单地将每个构面添加两次,一次使用构面过滤器,一次没有?

于 2013-06-13T18:01:27.910 回答