elasticsearch批量局部更新数据
Posted tjp40922
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch批量局部更新数据相关的知识,希望对你有一定的参考价值。
一.方法一
def update_data_batch(self,actions): """ 批量更新数据 :param actions: :return: """ item_list=[] for data in actions: dic = { "_index": self.index, "_type": self._type, "_op_type": "update", "_id": data.get(‘id‘), "doc": data } item_list.append(dic) if len(item_list) == 500: success, _ = bulk(self.client, item_list) item_list.clear() if item_list: success, _ = bulk(self.client, item_list) print(success, _) self.client.indices.refresh() if __name__ == ‘__main__‘: ll=[] for i in range(10): dic={ "size":1111,‘id‘:i } ll.append(dic) es_tt.update_data_batch(ll)
其实就是把要更新的字段的值直接作为doc字段的值,另外是一定要指定_id的,也就是要更新到哪一条数据
方法二.
ll = [] for num, data in enumerate(es_tt.scan_all_data()): insert_dic = { "_index": es_tt.index, "_type": es_tt._type, "_op_type": "update", #指定更新方式插入数据 "_id": data.get(‘id‘), "script": { "source": "ctx._source.price=params.price", #ctx._source.price指定是原数据要更新的字段为price, "params": { #params为参数,params中的字段名可以随便设置,值为用来替换原数据中字段的值 "price": num } } } ll.append(insert_dic) bulk(es_tt.client, ll)
#主要是指定script字段,里面有两个字段,source和params,soure指定原数据套替换的字段和替换成什么值,params指定要替换成的值
以上是关于elasticsearch批量局部更新数据的主要内容,如果未能解决你的问题,请参考以下文章
使用标准库Ruby将数据标记到Elasticsearch批量中
Spring Boot Elasticsearch7.6.2实现创建索引删除索引判断索引是否存在获取/添加/删除/更新索引别名单条/批量插入单条/批量更新删除数据递归统计ES聚合的数据
ElasticSearch实战(十八)-DSL批量写入与更新