当前位置: 首页 > 知识库问答 >
问题:

带背景过滤的Elasticsearch嵌套重要项聚合

常永怡
2023-03-14

我很难将后台筛选器应用到嵌套的重要术语聚合中,bg_count总是0。

我正在索引具有ID和时间戳的文章视图,并且在一个索引上有多个应用程序。我希望前台和后台设置与同一个应用程序相关,因此我试图在boo查询和后台过滤器中对app_id字段应用术语过滤器。article_views是一个嵌套对象,因为我还希望能够在timestamp上使用范围过滤器查询视图,但我还没有做到这一点。

映射:

    {
    "article_views": {
        "type": "nested",
        "properties": {
            "id": {
                "type": "string",
                "index": "not_analyzed"
            },
            "timestamp": {
                "type": "date",
                "format": "strict_date_optional_time||epoch_millis"
            }
        }
    },
    "app_id": {
        "type": "string",
        "index": "not_analyzed"
    }
}

查询:

  {
   "aggregations": {
      "articles": {
         "nested": {
            "path": "article_views"
         },
         "aggs": {
            "articles": {
               "significant_terms": {
                  "field": "article_views.id",
                  "size": 5,
                  "background_filter": {
                     "term": {
                        "app_id": "17"
                     }
                  }
               }
            }
         }
      }
   },
   "query": {
      "bool": {
         "must": [
            {
               "term": {
                  "app_id": "17"
               }
            },
            {
               "nested": {
                  "path": "article_views",
                  "query": {
                     "terms": {
                        "article_views.id": [
                           "1",
                           "2"
                        ]
                     }
                  }
               }
            }
         ]
      }
   }
}

正如我所说,在我的结果中,bg_count总是0,这让我很担心。如果重要术语位于其他未嵌套的字段上,background_filter工作正常。

Elasticsearch版本为2.2。

谢谢

共有1个答案

柴寂离
2023-03-14

您似乎遇到了以下问题,在后台筛选器中,您需要“返回”到父上下文,以便基于父文档的字段定义后台筛选器。

此时需要一个reverse_nested查询,但这个查询并不存在。

避免这种情况的一种方法是将app_id字段添加到嵌套文档中,这样您就可以简单地在后台筛选上下文中使用它。

 类似资料:
  • 问题内容: 我正在尝试过滤存储桶中的嵌套聚合。 对应: 索引数据: 我正在使用此查询和聚合定义 我从聚合结果中得到的是: 我在筛选存储桶列表时遇到了麻烦,因为它们只能提供所提供的事件ID,因此结果应类似于: 问题答案: 您快到了,只需要在聚合中添加过滤器即可,如下所示: 原因是您的查询将正确选择具有指定事件ID的嵌套事件的所有文档,但是,汇总将对所有选定文档中的所有嵌套事件进行处理。因此,您还需要

  • 问题内容: 我刚开始使用ElasticSearch几天,而作为一项学习练习,我实施了一个基本的工作搜寻器,该工作收集器汇总了一些求职网站上的工作,并在其中填充了一些数据供我使用。 我的索引包含每个列出职位的网站的文档。每个文档的一个属性是一个“作业”数组,其中包含该站点上存在的每个作业的对象。我正在考虑将每个作业作为自己的文档建立索引(特别是因为ElasticSearch文档说inner_hits

  • 如何聚合一个值在嵌套在Elasticsearch嵌套位置?我对一个嵌套对象没有问题,但在嵌套对象内的嵌套我感到困惑... 样本数据: 欲望结果: 在索引映射中,我将cat_a和条目字段的类型设置为嵌套,当我从工具字段查询聚合时,在cat_a的根(级别1)中没有问题,并且可以工作,但是在聚合中在rx_a(这是在第2级)我不能检索结果,它或空或显示错误,因为我的错误查询。 查询级别1 agg: 如何处

  • 我试图在c#中运行聚合查询(使用nest 5),但我不知道我得到了多少聚合作为输入以及聚合类型是什么。 例如,一个查询是:{"aggs":{"type_count":{"术语":{"field":"type"}}}} 其他查询将是:{“aggs”:{“type\u count”:{“terms”:{“field”:“type”}},“salary\u count”:{“field”:“salary

  • 在这里,我得到了错误: “无效的术语聚合顺序路径[price>price>price.max]。术语桶只能在子聚合器路径上排序,该路径由路径中的零个或多个单桶聚合和路径末尾的最终单桶或度量聚合组成。子路径[price]指向非单桶聚合” 如果我按持续时间聚合排序,查询可以正常工作,如 那么,有什么方法可以通过嵌套字段上的嵌套聚合来排序聚合吗?

  • 问题内容: 我有带有嵌套字段的文档,如下所示: 嵌套字段的映射如下所示: 在切换到elasticsearch 2之前,我有一个带有aggs的查询,该查询计算了没有结果的文档。这是查询的聚合部分: 现在我切换到elasticserach 2,它只计算所有文档。我已经尝试过其他操作,例如计算所有文档和计算结果,以便可以减去结果,但是 总是0 如何正确过滤/计数嵌套字段? 问题答案: 如果您要计算产生结