此问题与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的所有语言名称...如何检索正确的语言名称?
答案 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"]
希望有所帮助