我需要使用该文档中数组内的字段对弹性索引中的文档进行排序。文档结构如下所示,
{
'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
字段对文档进行排序,以便首先获取包含最新评论的文档。到目前为止,我已经考虑在文档中保留单独的字段以跟踪上一个评论日期。所以文件变成,
{
'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
答案 0 :(得分:1)
如果您在不创建索引映射的情况下获取数据,Elasticsearch将拼合嵌套的文档。
Elasticsearch这样做是为了加快查询速度,尽管它不适用于此类情况。
确保在摄取要建立索引的数据之前创建自定义映射。