【发布时间】:2020-01-25 00:43:15
【问题描述】:
我需要使用该文档中数组内的字段对弹性索引中的文档进行排序。文档结构是这样的,
{
'name':'xxxxx',
'comments':[
{comment: 'xxxxx', 'commentDate':'yyyy-MM-dd HH:mm:ss', 'id':1},
{comment: 'xxxxx', 'commentDate':'yyyy-MM-dd HH:mm:ss', 'id':2}
]
}
我要做的是根据commentDate 字段对文档进行排序,以首先获取具有最新 cmets 的文档。到目前为止,我已经考虑在文档中保留单独的字段来跟踪最后的评论日期。于是文件就变成了,
{
'name':'xxxxx',
'comments':[
{comment: 'xxxxx', 'commentDate':'yyyy-MM-dd HH:mm:ss', 'id':1},
{comment: 'xxxxx', 'commentDate':'yyyy-MM-dd HH:mm:ss', 'id':2}
],
'lastCommentDate': 'yyyy-MM-dd HH:mm:ss'
}
我想知道这是否是最好的方法,或者是否可以在不更改索引的情况下使用脚本排序来做到这一点?
我正在使用 Elastic API for Java,如果您能告诉我如何在不更改索引的情况下执行此操作,我们将不胜感激。另外,我想直接从ES获取排序后的数据集,所以获取数据后排序不是我要找的
弹性版本:5.1.1
【问题讨论】:
-
你用的是什么版本的ES?
-
@Amriteya 我使用的是 5.1.1 版
-
您正在运行的查询是什么?
-
另外,你是在提取数据之前设置索引的映射吗?
-
这可能是问题所在。当您在不设置映射的情况下自动索引时,嵌套文档无法正确映射。
标签: java arrays sorting elasticsearch