elasticsearch - 如何在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++"
吗?
最后,我是否必须担心重新索引的映射,或者我可以假设这将在重新索引时自动完成。
先感谢您。
解决方案
您必须在调用 _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 有字符,以上将失败
推荐阅读
- python-3.x -
如作者所示,我们真的需要 super() 函数吗? - azure - 如何在同一 Azure VM 上托管 Web 服务器和数据库服务器
- c# - 如何使用反射获取声明的类型
- java - 基本 Java GUI 兴趣计算器中的线程“AWT-EventQueue-0”java.lang.NullPointerException 中的异常
- pandas - pandas to_parquet:在写入之前清理现有目录
- git - 使用 Git Flow 的正确流程是什么?
- r - (函数(el,elname)中的错误:“plot.title.position”不是有效的主题元素名称
- mysql - laravel 嵌套数据库事务未提交
- vue.js - nuxtjs vuetify v-img 占位符不起作用
- python - 尝试抓取特定网页时,在 Python 中发送请求返回无