我使用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"
}
}
}
}
结果: