栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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

实习踩坑之路: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就行了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653699.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号