我有一个ElasticSearch索引:example这个索引的类型为YYYYMMDD格式的日期。例如,example/20190810是一个索引,其类型包含在20190810上插入的文档。索引没有带日期的字段,所以我添加了一个字段。现在,我想要做的是获取每种类型的所有文档,并将日期作为_type插入。有没有办法做到这一点?
For example:
_type: 20190810,
volume: 22,
created: 20190810 <-- Date field I added to copy its type发布于 2019-08-30 00:12:30
不幸的是,我认为答案是你不能/不应该这样做。
在较新版本的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会给你一个关于在索引上有多个类型的错误。
发布于 2019-08-30 02:03:46
我同意Miek的回答,但也许我们可以提出一种替代方法来实现您正在尝试使用_type字段所做的事情。您可以将信息添加到文档中的新字段中,并且不会遇到在同一索引中有多个类型的问题(一个字段会有多个值)
如果我猜您这样做是为了能够在查询中使用索引/类型语法来获取数据,那么我简单地建议您使用搜索/查询apis来获取给定日期的数据。
您是否可以编辑问题以包含更多关于您正在尝试实现的内容的上下文?
(注:声誉太低,无法置评)
https://stackoverflow.com/questions/57713557
复制相似问题