首页 > 解决方案 > 如何在elasticsearch中将字符附加到字符串?

问题描述

我正在尝试在使用 _reindex API 时编写转换。这个想法是我正在使用现有索引,我想重新索引它并将一个数字附加到进程中的几个哈希字符串参数的末尾(类型字符串)。这是一个可行的解决方案吗?

POST <index>/<index_type>/_reindex
{
  "source": {
    "index": "<index_name>"
  },
  "dest": {
    "index": "<new_index_name>",
  },
  "script": {
        "source": "ctx._source.bene_acc_no += '21' ",
        "source" : "ctx._source.orig_acc_no += '21' ",
        "source" : "ctx._source.owner_acc_no += '21' "
  }
}

或者我可以简单地使用"source" : "ctx._source.owner_acc_no++"吗?

最后,我是否必须担心重新索引的映射,或者我可以假设这将在重新索引时自动完成。

先感谢您。

标签: elasticsearchreindex

解决方案


重新索引 API

您必须在调用 _reindex 之前设置目标索引。重新索引不会从源索引复制设置。映射、分片计数、副本等必须提前配置。

如果在执行 reindex api 之前未创建新索引的映射,则将动态创建映射,即将从复制的第一个文档推断字段的数据类型。所以最好事先创建映射

重新索引语法

POST _reindex
{
  "source": {
    "index": "<source_index>"
  },
  "dest": {
    "index": "<destination_index>"
  },
  "script": {
      "source":"ctx._source.bene_acc_no += '21'; ctx._source.orig_acc_no += '21';ctx._source.owner_acc_no += '21'"
  }
}

如果 bene_acc_no 是文本类型

ctx._source.bene_acc_no += '21' 将在值 ex 之后附加 21。如果 bene_acc_no ="20" 那么新值将是 "2021"

如果值是存储为字符串的整数并且您希望增加该值,那么您可以使用下面的脚本“ctx._source.bene_acc_no= (Integer.parseInt(ctx._source.bene_acc_no)+1).toString()”

如果 bene_acc_no 有字符,以上将失败


推荐阅读