Python elasticsearch中的简单更新字段
几周前我开始使用Elsaticsearch和Sense。 现在我需要批量更新某些索引的所有文档中的字符串字段,如下所示: 如果字符串以“+”开头,则将字段更新为不带“+”的相同值 旧号码:“+21211223” 新:号码:“21211223” 有没有一种简单的方法可以让我用RESTDSL来实现这一点,或者我需要使用Python 谢谢 如果可以安装,有一种方法可以做到。该插件的工作原理是为其提供一个匹配要更新的文档的查询和一个更新匹配文档的脚本Python elasticsearch中的简单更新字段,python,elasticsearch,sense,Python,elasticsearch,Sense,几周前我开始使用Elsaticsearch和Sense。 现在我需要批量更新某些索引的所有文档中的字符串字段,如下所示: 如果字符串以“+”开头,则将字段更新为不带“+”的相同值 旧号码:“+21211223” 新:号码:“21211223” 有没有一种简单的方法可以让我用RESTDSL来实现这一点,或者我需要使用Python 谢谢 如果可以安装,有一种方法可以做到。该插件的工作原理是为其提供一个匹配要更新的文档的查询和一个更新匹配文档的脚本 curl -XPOST localhost:9200
curl -XPOST localhost:9200/your_index/your_type/_update_by_query -d '
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "_source[\"your_field\"].indexOf(\"+\") == 0"
}
}
}
},
"script": "ctx._source.your_field = ctx._source.your_field.substring(1);"
}'
注意:分别用索引、类型和字段名替换您的\u索引
、您的\u类型
和您的\u字段
因此,我们告诉插件更新包含以
+
开头的您的\u字段
值的所有文档(不知道您的\u字段
是否是已分析的字符串,这里我们直接查看\u源
以确保检查已索引的原始字符串值)然后我们告诉脚本更新每个匹配的文档,方法是取值的子字符串,去掉+
符号。用于ElasticSearch的Python库很可能也在使用RESTAPI。关于主题:afaik您不能在ElasticSearch中同时执行查询和更新。更新意味着重新索引和重新索引是单独完成的。因此,您应该不断获取一批应该更新的元素,然后对它们重新编制索引,或者如果您的数据来自外部源,则可能会在那里找到错误的数据并重新编制索引。