首页 > 其他 > 详细

elasticsearch批量局部更新数据

时间:2020-06-30 00:18:44      阅读:435      评论:0      收藏:0      [点我收藏+]

一.方法一

    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批量局部更新数据

原文:https://www.cnblogs.com/tjp40922/p/13211150.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!