【问题标题】:How to rename field names while Indexing a document in ElasticSearch如何在 ElasticSearch 中索引文档时重命名字段名称
【发布时间】:2020-02-14 12:24:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: elasticsearch elasticsearch-indices


    【解决方案1】:

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

    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",
    }
    

    【讨论】:

    • 谢谢,它确实有效。但是我怎样才能在多个字段上做到这一点,而不仅仅是在一个字段上。我是否必须为每个字段创建一个管道并添加 pipeline=pipeline1&pipeline2&pipeline3 ?或者有没有其他简单的方法来实现多字段重命名?
    • 您可以将多个重命名转换添加到管道 json 的处理器部分。更新了答案
    • 我已经尝试过了,但我不断收到此错误Duplicate key "rename"
    • 您需要将重命名 json 键/值重新包装在处理器列表中的对象中。请注意,在示例中,处理器不是一个对象,它是一个对象列表
    • 我已经将每个重命名对象包装在另一个对象中,它现在可以工作了!谢谢!由于该示例没有将每个重命名对象包装在对象本身中,因此有些混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2015-05-04
    相关资源
    最近更新 更多