获取嵌套字段 ElasticSearch 中的最后一项

Get last item in a nested field ElasticSearch

我使用ElasticSearch 来存储数据。我想获取嵌套字段中的最后一项。更具体地说,消息数组的最后一个元素。数据结构enter image description here

您可以在搜索查询中使用 scripted_fields 来查找数组的最后一个元素。


例如,示例数据如下所示:

POST room/_doc
{
  "message": [
    {"date": "2019-12-11T11:21:29.060Z", "name":"", "id":"SYSTEM_MESSAGE"},
    {"date": "2019-12-11T11:21:41.525Z", "name":"n910827m", "id":"SYSTEM_MESSAGE"}
  ],
  "name": "hello",
  "superuser": "9hxj0BNxs4AppB7kAAAD"
}


并且,如果您想查找 message 字段的最后一个元素,搜索查询如下所示:

POST room/_search
{
  "script_fields": {
    "message": {
      "script": {
        "source": 
        """
        def messages = params['_source']['message'];
        return messages[messages.length - 1];
        """, 
        "lang": "painless"
      }
    }
  }
}


结果: