python+mysql+elasticsearch常见问题解决指南

python+mysql+elasticsearch常见问题解决指南

1、python+Elasticsearch问题

1:安装pip install elasticsearch
2:连接

from elasticsearch import Elasticsearch
es = Elasticsearch(['http://localhost:9200']) # 单个
es = Elasticsearch("['http://xxx.xxx.x.x:9200','http://xxx.xxx.x.x:9200']") # 多个

记住是http而不是https,否则会连接失败!

3:查询result = es.search(index="xxx", size=20) # xxx为自己的索引(数据表),size为想要展示的结果数量,还有一些其他参数可以根据自己需求进行设置。
4:删除或更新索引(数据表)中的文档(数据):通常来讲是通过对id的处理来实现的,例如:es.delete(index='xxx',id=xxx) 或是 es.update(index="xxx", id=xxx, body={"doc": {xxx}}),但通常来讲如果不在插入文档时指定id,则会由系统自动分配id,因而难以进行简单的精准定位,此时可以选择利用条件查询来进行删除和更新,即利用查询的结构化语句来进行操作,即:es.delete_by_query(index='xxx',body=xxx)或者直接查询到要删除的文档的id进行删除,即:

id = es.search(index='xxx', body=xxx)['hits']['hits'][0]['_id']
es.delete(index='sc', id = id)

这里在进行每一步修改操作后如果想要立即查询到结果需要先进行一步时间等待:

import time
time.sleep(1)

2、python+mysql日志问题

1、获取binlog日志

from pymysqlreplication import BinLogStreamReader
from pymysqlreplication.row_event import WriteRowsEvent, UpdateRowsEvent, DeleteRowsEvent
MYSQL_SETTINGS = {'host': xxxx', 'user': 'xxx', 'password': 'xxxxxxxxx'}

stream=BinLogStreamReader(connection_settings=MYSQL_SETTINGS,
                          resume_stream=True,  #这个参数如不设置会默认每次都读取先前进行过的所有操作!!!
                          server_id=x, #自己指定id
                          blocking=True,
                          only_schemas="content_search", #找到这个数据库的名字
                          only_tables=['modifysql'], #找到这个数据表的名字
                          only_events=[WriteRowsEvent, UpdateRowsEvent, DeleteRowsEvent] #指定操作
                         )

2、获取操作类型和操作内容

for binlogstream in stream:
	action_type = str(binlogstream).split(".")[2].split(" ")[0]  # 获取类型
	action_context = binlogstream.rows[0]  # 获取内容

这样一来后续的增删改操作即可通过action_type进行分类处理,相对更为直观。

3、python+mysql+elasticsearch同步问题

对于这个问题,网上的大部分解决策略都是通过kafka生产消费者模式来实现的。但通过上述两个操作后,我觉得这里可以直接根据mysql的日志操作类型和操作内容来连接到elasticsearch的索引更新操作来实现,实际运行上也能够正常实现。不知道这样做和通过kafka模式来实现有什么区别或者弊端,还得后续继续研究发现。如果有大佬了解也欢迎留言指正~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值