我有一个ElasticSearch索引:example
该索引具有YYYYMMDD
格式的日期类型。例如,example / 20190810是一种索引,其类型包含在20190810上插入的文档。该索引没有带有日期的字段,因此我添加了一个字段。现在,我要做的是获取每种类型的所有文档,并将日期插入为_type。有没有办法做到这一点?
For example:
_type: 20190810,
volume: 22,
created: 20190810 <-- Date field I added to copy its type
答案 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获取给定日期的数据。
您可以编辑问题以包含更多有关要实现的目标的背景信息吗?
(注意:声誉太低,无法评论)