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

在复合聚合中使用嵌套字段

房子昂
2023-03-14

基本上,我试图通过名字和姓氏找到重复的联系人

我错过了什么吗?任何帮助都将不胜感激。

下面是示例文档之一

{
    "regionId": 10,
    "firstName": "John",
    "lastName": "mayer",
    "emails": [
      {
        "isPrimary": true,
        "email": "sample@gmail.com"
      }
    ]
}

我试图对Elasticsearch进行如下查询:

GET contacts/_search
{
  "size" : 0,
  "query" : {
    "term" : {
      "regionId" : {
        "value" : 10,
        "boost" : 1.0
      }
    }
  },
  "_source" : false,
  "stored_fields" : "_none_",
  "aggregations" : {
    "groupby" : {
      "composite" : {
        "size" : 1000,
        "sources" : [
          {
            "firstNameField" : {
              "terms" : {
                "field" : "firstName.keyword",
                "missing_bucket" : true,
                "order" : "asc"
              }
            }
          },
          {
            "lastNameField" : {
              "terms" : {
                "field" : "lastName.keyword",
                "missing_bucket" : true,
                "order" : "asc"
              }
            }
          },
          {
            "emailField" : {
              "terms" : {
                "field" : "emails.email.keyword",
                "missing_bucket" : true,
                "order" : "asc"
              }
            }
          }
        ]
      },
      "aggregations" : {
        "having.3483" : {
          "bucket_selector" : {
            "buckets_path" : {
              "a0" : "_count"
            },
            "script" : {
              "source" : "InternalSqlScriptUtils.nullSafeFilter(InternalSqlScriptUtils.gt(params.a0,params.v0))",
              "lang" : "painless",
              "params" : {
                "v0" : 1
              }
            },
            "gap_policy" : "skip"
          }
        }
      }
    }
  }
}

共有1个答案

洪鸿
2023-03-14

不幸的是,这是不可能的。复合中的所有源都需要位于相同的嵌套上下文下。

我建议提取主邮件

GET contacts/_update_by_query
{
  "query": {
    "nested": {
      "path": "emails",
      "query": {
        "exists": {
          "field": "emails.isPrimary"
        }
      }
    }
  },
  "script": {
    "source": """
      ctx._source.primary_email = ctx._source.emails.find(egroup -> egroup.isPrimary).email;
    """,
    "lang": "painless"
  }
}

然后在主_电子邮件上执行复合agg。关键字。

 类似资料:
  • 我正在尝试设置一个搜索查询,该查询应通过多级嵌套字段复合聚合集合,并从该集合中提供一些子聚合指标。我能够按预期使用其存储桶获取复合聚合,但所有存储桶的子聚合指标都带有。我不确定我是否未能正确指出子聚合应考虑哪些字段,或者它是否应放置在查询的不同部分中。 我的收藏看起来类似于以下内容: 贝娄,你可以找到我已经尝试了。尽管所有文档都有一个设置的点击值,但所有存储桶都带有点击总数。 到目前为止,我的回应

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

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

  • 我看到一些关于嵌套字段和聚合的帖子,但它们似乎都没有回答我的问题。所以,如果这是一个重复的问题,请原谅,如果有任何帮助,我们将不胜感激。 我们建立了一个讲座索引,讲座具有以下特点: 讲座可以是面对面(现场)或预先录制(在线) 每个讲座可以有多个章节 这些章节中的每一个都可以由不同的讲师讲解(例如:量子物理的第一章可以由五个不同的讲师讲解,其中三个可能是现场直播,另外两个可能在线) 在线讲座每个讲师

  • 我在elasticsearch中对嵌套字段使用复合聚合,但我想从结果中排除一些术语。 此聚合正在工作: 但是我想从stk2中排除一些术语, 上述查询不起作用。 更新1:结果应该只省略数组元素,而不是包含“cancel”的整个文档。 我使用的是弹性v6.7

  • 问题内容: 我在elasticsearch(YML中的定义)中具有字段的下一个映射: 每个文档都有很多过滤器,看起来像: 我试图获取唯一过滤器名称的列表以及每个过滤器的唯一过滤器值的列表。 我的意思是,我想获得结构是怎样的:Rahmengröße: 39.5厘米 45.5厘米 33.5厘米 颜色: 盖尔布 为了得到它,我尝试了几种聚合的变体,例如: 这个请求是错误的。 它将为我返回唯一过滤器名称的