实习踩坑之路:ElasticSearch搜索出来了不是自己的数据?Elastic会像MyBatisPlus一样会帮我们做判断null的操作么?
Posted 会写代码的花城
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实习踩坑之路: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就行了
以上是关于实习踩坑之路:ElasticSearch搜索出来了不是自己的数据?Elastic会像MyBatisPlus一样会帮我们做判断null的操作么?的主要内容,如果未能解决你的问题,请参考以下文章