【问题标题】:How to sort an ElasticSearch index using a field inside an array?如何使用数组中的字段对 ElasticSearch 索引进行排序?
【发布时间】: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


【解决方案1】:

如果您在没有在索引上创建映射的情况下提取数据,Elasticsearch 会展平嵌套文档。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2022-09-23
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多