码迷,mamicode.com
首页 > 其他好文 > 详细

elasticsearch批量局部更新数据

时间:2020-06-30 00:36:01      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:res   批量   指定   lis   方法   字段名   col   code   actions   

一.方法一

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

标签:res   批量   指定   lis   方法   字段名   col   code   actions   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!