如何使用数组中的字段对ElasticSearch索引进行排序?

时间:2018-01-25 05:19:50

标签: java arrays sorting elasticsearch

我需要使用该文档中数组内的字段对弹性索引中的文档进行排序。文档结构如下所示,

{
  '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

1 个答案:

答案 0 :(得分:1)

如果您在不创建索引映射的情况下获取数据,Elasticsearch将拼合嵌套的文档。

Elasticsearch这样做是为了加快查询速度,尽管它不适用于此类情况。

确保在摄取要建立索引的数据之前创建自定义映射。