更新所有文档字段条目

时间:2019-08-29 15:37:05

标签: elasticsearch kibana

我有一个ElasticSearch索引:example该索引具有YYYYMMDD格式的日期类型。例如,example / 20190810是一种索引,其类型包含在20190810上插入的文档。该索引没有带有日期的字段,因此我添加了一个字段。现在,我要做的是获取每种类型的所有文档,并将日期插入为_type。有没有办法做到这一点?

For example:
_type: 20190810,
volume: 22,
created: 20190810 <-- Date field I added to copy its type

2 个答案:

答案 0 :(得分:1)

不幸的是,我认为答案是您不能/不应该这样做。

在新版本的Elastic中,将仅允许一种类型。即使您可以在现有文档上更新_type,ES7 +也会为每个索引仅允许一种类型。

大多数字段都是公平的游戏,但是据我所知,_type在创建后无法修改。您可以使用此脚本进行验证。

POST example/_update_by_query
{
  "script": {
    "lang": "painless",
    "source": "ctx._type = ctx._source.date"
  }
}

哪个输出

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "Modifying [_type] not allowed"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "Modifying [_type] not allowed"
  },
  "status": 400
}

我用ES6进行了测试。 ES7会给您一个关于在索引上具有多种类型的错误。

答案 1 :(得分:0)

我同意Miek的回答,但是也许我们可以提出另一种方法来实现您试图使用_type字段进行的操作。您可以将信息添加到文档中的新字段中,而不会遇到在同一索引中具有多个类型的问题(相反,您将为字段具有多个值)

如果我想您这样做是为了能够使用查询中的索引/类型语法获取数据,我只建议您使用搜索/查询api获取给定日期的数据。

您可以编辑问题以包含更多有关要实现的目标的背景信息吗?

(注意:声誉太低,无法评论)