不要急,总有办法的

ES库查询数据不一致性

Elasticsearch | 作者 chenxuhu_2018 | 发布于2018年10月17日 | 阅读数:7308

我们生产环境的ES是2.4的,通过同步程序把上游系统的200W条数据同步到我们ES库时  中间同步程序停止了    通过sense查询  第一次点击查询显示120W条,第二次点击查询有100W条  第三次查询有120W条  第四次查询有100  以此类推  ,请问原因是什么?
已邀请:

rochy - rochy_he

赞同来自: chenxuhu_2018

你先对索引进行 refresh 和 flush 操作,然后在执行查询看一下效果
如果想保持查询数目一致,你可以在查询时添加参数 preference ,具体请参考:https://www.elastic.co/guide/e ... .html

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: chenxuhu_2018

1.数据在大量写入的过程中,数据分散到集群中不同节点的不同分片;
2.ES查询的时候是从不同分片&副本读取数据,然后汇集结果。
3.解决办法是查询url里添加preference=<some string>  这个参数,其中<some string>可以是用户的session ID,这样某一个用户查询的时候,查询会被固定在某几个shard
参考官网:https://www.elastic.co/guide/e ... rence

code4j - coder github: https://github.com/rpgmakervx

赞同来自: chenxuhu_2018

es写入先走主分片,然后主分片同步到副本, 有可能是主从同步尚未执行完,然后你执行了查询;而查询是主副本都能执行的,就有可能查询到某个分片的部分时有数据未同步到,再次查询路由到主分片就查到了。 再就是refresh间隔也会影响数据一致性。
 
楼上的preference推荐试试,至少保证请求幂等

要回复问题请先登录注册