在聚合中使用inner_hits

时间:2015-11-03 08:33:07

标签: elasticsearch

我有一组文档,这些文档都包含一系列带有重要数据的嵌套对象。我想对这些进行聚合,这会返回第一个文档,最后一个文档以及该组中的所有嵌套对象。除了嵌套对象之外,我可以实现该列表中的所有内容。

映射:

"instances": {
"properties": {
   "aggField": {
      "type": "string",
      "index": "not_analyzed"
   },
   "id": {
      "type": "integer"
   },
   "nestedObjs": {
      "type": "nested",
      "properties": {
         "key": {
            "type": "string",
            "index": "not_analyzed"
         },
         "value": {
            "type": "integer"
         }
      }
   },
   "timestamp": {
      "type": "date",
      "format": "dateOptionalTime"
   }
}

}

查询:

{
"size" : 0,
"aggs" : {
    "agg-buckets" : {
        "terms" : {
            "field" : "aggField",
            "size" : 10
        },
        "aggs": {
            "last-report": {
                "top_hits": {
                    "sort": [
                        {
                            "timestamp": {
                                "order": "desc"
                            }
                        }
                    ],
                    "size": 1
                }
            },
            "first-report": {
                "top_hits": {
                    "sort": [
                        {
                            "timestamp": {
                                "order": "asc"
                            }
                        }
                    ],
                    "size": 1
                }
            },
            "nested-objs": {
                "nested": {
                    "path": "nestedObjs",
                    "inner_hits": {}
                }
            }
        }
    }
}

但这失败了:

解析失败[[nested-objs]中的意外标记START_OBJECT。]

如果我删除“inner_hits”字段,它可以正常工作。但它只是给我文件计数而不是文件本身。

我做错了什么?

E:我正在使用ES版本1.7.1

1 个答案:

答案 0 :(得分:0)

您确定inner_hits聚合中允许nested(而不是nested查询)吗?我怀疑这是造成错误的原因。