ElasticSearch更新数据后查不到的问题

一、前言

上一篇文章还是2个星期前写的,近段时间有点懒,本来这篇也不太愿意动笔写,但这两天关注数据,发现新的一年已经收获了4个粉丝,首先感谢大家的关注,我以后还是会尽量多写一点。这篇文章讲一下今天我们微服务重构项目中测试时碰到的问题,我们有一个功能做商品上下架,当点击了开关按纽,设置商品上架,但前端页面还是显示下架状态,这里调用了两个接口,一个接口更新状态(商品库DB、商品ES),然后立即调用查询接口(走ES),发现返回来的数据还是下架状态,但这时候再去Kinaba控制台查发现状态已经是上架的。

二、问题原因

ES在进行写操作时,会先在内存中缓存一段数据,然后采取一定的策略,将 这些数据写入磁盘,这个过程称Refresh,每次Refresh都会产生一个新的Lucene段,但段过多又会消耗文件句柄,内存,所以又有一定的策略将这些较小的段合并为大的段,刷新的ES默认采用每隔1秒定时刷新,所以刚写进去的数据立即去查极有可能是查不到。

三、解决方案

1、直接修改ES刷新频率

注:不建议生产环境采用该方案,并且这个刷新时间你也很难确定。

2、请求接口请求后强制刷新

ElasticSearch更新数据后查不到的问题_第1张图片

注:ES8的语法,包括新写入数据、变更数据、删除数据都存在不会立即刷新的问题。

四、ES更新原理

ElasticSearch更新数据后查不到的问题_第2张图片

你可能感兴趣的:(存储,elasticsearch,大数据,搜索引擎)