在我的ES中,我有一个如下的架构类型:

{
  "index_v1":{
    "mappings":{
      "fuas":{
        "properties":{
          "comment":{
            "type":"string"
          },
          "matter":{
            "type":"string"
          },
          "metainfos":{
            "properties":{
              "department":{
                "type":"string"
              },
              "processos":{
                "type":"string"
              }
            }
          }
        }
      }
    }
  }
}

不久,fuas类型具有两个属性commentmatter以及一个内部(非嵌套)对象metainfos和几个属性departmentprocessos

我想知道有多少metainfos' fields被告知其出现次数。

想象一下一个文档doc1metainfos: {department: "d1"}以及doc2metainfos: {department: "d2", processos: "p1"}

然后,我想获取:{department: 2, processos: 1}

编辑

作为内部对象,由于ES是无模式文档的metainfos内部对象,因此可以通知或不通知多个字段。

因此,doc1's metainfos {field1: 1, field3: 3}doc2's metainfos {field2: 1, field4: 5}doc3's metainfos {field1:2, field4: 2, field5: 1}

我想要得到:{field1: 2, field2: 1, field3: 1, field4: 2, field5: 1}。我认为要解决的主要问题是如何能够查询我不知道的字段。

我已经测试了两个文档:
{
  "hits":{
    "total":2,
    "max_score":1.0,
    "hits":[
      {
        "_source":{
          "matter":"FUA2",
          "comment":null,
          "metainfos":[
            {
              "department":"d1"
            }
          ]
        }
      },
      {
        "_source":{
          "matter":"FUA1",
          "comment":"vcvcvc",
          "metainfos":[
            {
              "department":"d1"
            },
            {
              "processos":"p1"
            }
          ]
        }
      }
    ]
  }
}

我已经使用以下命令对此进行了测试:
curl -XGET 'http://localhost:9201/living_team/fuas/_search?pretty' -d '
{
  "size": 0,
  "aggregations" : {
    "followUpActivity.metainfo.department" : {
      "terms" : {
        "field" : "metainfos.*"
      }
    }
  }
}
'

结果是:
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "followUpActivity.metainfo.department" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [ ]
    }
  }
}

最佳答案

您可以为此使用 value_count aggregation:

{
    "size": 0,
    "aggs" : {
        "dept" : {
            "value_count" : { "field" : "metainfos.department" }
        },
        "proc" : {
            "value_count" : { "field" : "metainfos.processos" }
        }
    }
}

关于elasticsearch - 内部对象上的ElasticSearch聚合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37458724/

10-10 11:08