如何在聚合项目数组时从聚合中检索更多数据?

时间:2014-07-27 15:21:26

标签: elasticsearch

此问题与How to retrieve more data in aggregation?有关。不同之处在于我尝试聚合字段“语言”,这是一个数组并包含许多条目,如:{ id: 1, name: "English" }

这是一个映射:

languages:
                properties:
                    name:
                        type: "string"
                        index: "not_analyzed"
                    id:
                        type: "long"

我尝试像这样聚合:

aggs:
    languages:
        terms:
           field: "languages.id"
           aggs:
              languageName:
                 terms:
                    field: "languages.name"

结果是:

{
  "key": 175,
  "doc_count": 1,
  "languageName": {
    "buckets": [
      {
        "key": "Latin",
        "doc_count": 1
      },
      {
        "key": "Lingala",
        "doc_count": 1
      },
      {
        "key": "Quechua",
        "doc_count": 1
      },
      {
        "key": "Tamil",
        "doc_count": 1
      },
      {
        "key": "Walloon",
        "doc_count": 1
      }
    ]
  }
}

由于某种原因,嵌套聚合返回单个语言ID的所有语言名称...如何检索正确的语言名称?

2 个答案:

答案 0 :(得分:2)

您必须使用嵌套聚合,

POST _search
{
   "size": 0,
   "aggs": {
      "nestedlang": {
         "nested": {
            "path": "languages"
         },
         "aggs": {
            "languages": {
               "term": {
                  "field": "languages.id"
               },
               "aggs": {
                  "languageName": {
                     "terms": {
                        "field": "languages.name"
                     }
                  }
               }
            }
         }
      }
   }
}

确保您为"语言" ..

设置了type = nested

例如。

{
    ...

    "languages" : {
        "properties" : {
            "resellers" : { 
                "type" : "nested"
                "properties" : {
                    "name" : { "type" : "string" },
                    "id" : { "type" : "long" }
                }
            }
        }
    }
} 

了解详情@ elasticserach

答案 1 :(得分:1)

如果以json格式提供映射,文档和查询,则更容易复制粘贴和重现。你真的在映射中使用嵌套对象吗?如果是这种情况,您还需要嵌套聚合: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-nested-aggregation.html

如果您没有使用嵌套对象,请查找内部对象的文档。最后,您可以使用实际上具有以下内容的文档:

languages.id=[1,2,3,4]
languages.name=["Latin","Lingala","Dutch","English"]

希望有所帮助

相关问题