栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

实现es的mysql中的upsert

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实现es的mysql中的upsert

最近由于查询速度要求。原使用的python转而使用es进行全文检索查询。

关于标签存储,es存储是一种选择。

原使用某国产数据库推送来的数据,数据字段需要与采集系统数据字段保持一致。所以有些字段例如RANK属于关键字。

脚本语言使用的是python3,所以在使用pymysql时会报错。因为将字段名称识别为rank函数。所以需要        表名.rank        的形式。

 通过建立mysql连接,获取mysql表内数据,数据形式为tuple

def readmysql(sql):
   
    conn = pymysql.connect(host='localhost',
                         user='username',
                         password='your password',
                         database='databasename',
                         charset='utf8',
                         port=portnum)
 
    result = pd.read_sql(sql, conn)
    result=list(result.itertuples(index=False))
    return result

第二步,写入es。使用方法为upsert

def writetoes(val):
    es = Elasticsearch([{'host':'hostaddress','port':portnum}],
                       sniff_on_start=False,
                       sniff_on_connection_fail=True,
                       sniffer_timeout=60000,
                       sniff_timeout=5000,
                       request_timeout=500000)
   
    
    for j in range(0,len(val),1000):
        actions = []
        bound=min(j+1000,len(val))
        for i in range(j,bound):
            action = {
                    "_index": "indexname",
                    "_type": "_doc",
                    "_id":val[i][0],
                    '_op_type': 'update',
                    "doc_as_upsert":True,
                    "null_value":" ",
                    "doc": {
                        
                        "upsert1": val[i][0],
                        "upsert2": val[i][1],
                        "upsert3":val[i][2],

                    }
            }
            actions.append(action)
        helpers.bulk(es, actions,request_timeout=500000)

 其中具体的参数需要自行进行配置,写入es采用的是bulk以及helper。一千条一次进行插入。request_timeout需要自行根据连接时间进行调整。

起到upsert关键作用的参数为doc_as_upsert,将其设为TRUE

es读取全量数据方法scroll方法相较于bulk会慢上许多。可能还需要进行调整优化。优化完再写,优化不出来就不写。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1033413.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号