如何在单个术语聚合中组合多个同级嵌套对象的属性,Elasticsearch

时间:2019-10-16 12:14:47

标签: elasticsearch elasticsearch-aggregation

我们在Elasticsearch中有一个用例,对于索引结构,我们在同级有多个嵌套对象, 对于我们的用例:我们需要在术语聚合中组合多个嵌套对象的属性,可以说,一个嵌套对象的属性1 +另一个嵌套对象的属性2作为单个术语键,

例如,文档结构为

{
 "OuterProperty1":"value",
 "NestedObject1" : {
              "Property1" : value 1,
              "Property2" : value 2
            },
 "NestedObject2" : {
              "Property1" : value 1,
              "Property2" : value 2
            }
}

对于与嵌套对象聚合的术语,我们要使用以下脚本,

  "script":{
          "source":"""
           String aggKey= (doc['NestedObject1.Property1'].value.toString())+'_'+(doc['NestedObject2.Property2'].value.toString());
             return aggKey;
          """
        ,
          "lang":"painless"
        },
        "size":10000

并访问组合键的不同嵌套对象的属性,我需要提供嵌套对象的相关“路径”,所以我的问题是,有没有一种方法可以提供多个路径,或者可以通过某种通配符方式来提供多个同级的多个嵌套对象聚合在一起,并实现组合查询结果?

在术语聚合中,我要使用的术语关键字是“ NestedObject1.Property1 + NestedObject2.Property1”的组合,我们想要实现的是:

    "buckets" : [
          {
            "key" : "NestedObject1.Property1_NestedObject2.Property1",
            "doc_count" : 14
          },
          {
            "key" : "NestedObject1.Property1_NestedObject2.Property2",
            "doc_count" : 4
          }...  
        ]

我们尝试了以下查询: 查询1:

{
    "query":{
    "bool":{
     "some filter..."
  }},
     "aggs":{
    "TopLevelAggs":{
      "nested":{
          "path":"NestedObject1"
        },
      "aggs":{
    "TestTopHitsAggs":{
              "nested": {
                "path": "NestedObject2"
              },
              "aggs":{
            "TopHitsAggs":{
      "terms": {
         "script":{
          "source":"""
           String TestLinkIdD= (doc['NestedObject1.Property1'].value.toString())+'_'+(doc['NestedObject2.Property2'].value.toString());
             return TestLinkIdD;
          """
        ,
          "lang":"painless"
        },
        "size":10000
      }
    }
          }
}
}
}
}
}

-上面的查询似乎没有提供任何结果。 -我们得到的输出是:

"aggregations" : {
    "ReportedProblemsTopLevelAggs" : {
      "doc_count" : 0,
      "TestTopHitsAggs" : {
        "doc_count" : 0,
        "TopHitsAggs" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [ ]
        }
      }
    }
  }

方式2: 我们还尝试使用“ reverse_nested聚合”访问NestedObject2,但不适用于该用例。 任何帮助将不胜感激!

0 个答案:

没有答案