如何在索引期间复制id字段(弹性搜索)



将_id作为文档的一部分通常很有用。事实上,这里建议:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-id-field.html

但是,如果在创建文档之前不知道_id,那么在索引过程中如何复制_id?我能想到的唯一方法是使用管道,但有更简单的方法吗?

编辑:根据下面的答案,即使是管道也无法实现这一点。

如果生成了_id,Ingest管道(当前版本7.9.2(将无法访问_id。文件中有一条注释:

如果您自动生成文档id,则不能在摄取处理器中使用{{_id}}值。Elasticsearch在摄取后分配自动生成的_id值。

当自动生成时,copy_to功能也不适用于_id。此信息有点隐藏在此处https://github.com/elastic/elasticsearch/issues/6730#issuecomment-103142553

使用doc['_id'].valuescript_fields查询也不推荐使用。

在我看来,出于不同的原因,这是我们许多人正在寻找的,但至少我知道没有解决方案。

对于自行生成的文档id,情况显然完全不同。

如果有人仍在寻找此问题的解决方案您可以使用脚本标记进行重新索引,并使用上下文对象获取_id,并将其与POCO 中的id匹配

POST /_reindex?wait_for_completion=false
{
"source": {
"index": "data.dataitems",
"query": {
"match_all": {}
}
},
"dest": {
"index": "data.dataitems_new_index_with_id"
},"script": {
"source": "ctx._source.id = ctx._id" 
}
}

最新更新