实习踩坑之路:ElasticSearch搜索出来了不是自己的数据?Elastic会像MyBatisPlus一样会帮我们做判断null的操作么?

问题复现

今天加班写了一个接口,刚开始发现诶数据还是正常的,觉得可以上线了,因为这个接口只是去ES查了一次数据,统计了一下数量,前端验证也没什么问题,但是突然,我发现了另一个问题:
在这里插入图片描述
这里面待处理是0 啊,为什么接口返回的是10,有值导致前端加了一个小红点,代表有会话的。
然后我就去看我写的代码
问题出在SQL查询,因为我要查询这个组(你可以理解为一个小组)下的所有数据。结果我没剔除已经删除了的人(账户).结果把那些剔除出这个组的账户的会话也查询了出来。
那好啊,我直接把SQL改了就行了吧,只查离线,在线的,那些删除的我不查这样总行了吧
结果,想象是美好的,现实是残酷的,还是数据不对,这个地方还是10,10
那是什么问题?

出路

因为这个地方是去查ES的,我在MySQL肯定是查不到这个结果的,难道是因为ES和MySQL数据不同步的原因么?
然后我就去ES查询工具查了一下,发现没有数据啊,都是0,应该也是两个0的,那么肯定就是代码问题了,然后我就回头开始看代码流程,最后发现,原因是我查询这个组的用户/账户后,并没有判空/null操作,就像MyBatisPlus一样,如果传递的参数为null,他会自动把这个参数给去掉,就是像这样
在这里插入图片描述
那是不是说我链接ES然后去查询的时候,ES看到这个参数传递的是null,他也把这个查询条件给干掉了,经过验证,确实是这样,ES的机制跟MyBatisPlus,或者上面那种SQL的写法一样,他也会帮你做一次判断,至此问题排查出来

解决

这个bug很简单,只是当时并没有想到这种情况,解决办法就是如果我查询的这个组下面的用户集合是个null的话,我们直接return就行了,return 这个对象都是0就行了

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>