在 ElasticSearch 中索引文档时如何重命名字段名称

How to rename field names while Indexing a document in ElasticSearch

我有一个 JSON 对象,其中的一些字段如下:-

{
    "desc": "this is test description",
    "name": "some random name",
}

在索引此文档时,我想更改字段名称,索引后我的文档应如下所示:-

{
    "description": "this is test description",
    "user_name": "some random name",
}

我读过有关 Ingest 管道处理器的信息,但它们仅在创建字段后才重命名。有什么方法可以在索引时更改字段名称?

执行此操作的方法是使用 Pipeline。一般的想法是你定义管道并在你的集群上给它一个名字。然后您可以在索引数据时引用它,您发送的数据将通过该管道传递以对其进行转换。请注意,管道只会在标记为 "ingest" 个节点的节点上 运行。

https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline.html

要具体重命名,您可以使用此处理器: https://www.elastic.co/guide/en/elasticsearch/reference/current/rename-processor.html

我没有明确测试这个,但代码应该是这样的:

使用名称在您的集群上定义管道:

PUT _ingest/pipeline/my-pipeline-name
{
  "description" : "rename user name",
  "processors" : [
    {
      "rename" : {
        "field": "name",
        "target_field": "user_name"
      },
      "rename" : {
        "field": "field2",
        "target_field": "newfield2"
      }
    }
  ]
}

使用管道加载您的文档:

POST /some_index/_doc/?pipeline=my-pipeline-name
{
    "desc": "this is test description",
    "name": "some random name",
}