当前位置: 首页 > 工具软件 > bboss > 使用案例 >

springboot+elasticsearch+bboss框架集成遇到的坑

太叔岳
2023-12-01

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

如果只是很简单的普通查询建议还是用springboot自带的es工具template什么的,也许更好,但其实这应该是个悖论,就是因为要实现更好更简单的复杂搜索才会上es,像我这次的功能主要是为了实现拼音搜索,用es会比用mysql加个拼音字段再模糊搜索要好的多,以后要实现高亮,中文拼音搜索之类的也会更好实现。
本文主要展示我在集成springboot+elasticsearch+bboss框架遇到的坑。
搭建教程官方文档点这里


一、为什么要用bboss?

为了在xml里直接写动态es查询、建索引语句。

二、遇到的坑

1.kibana、head页面查询结果不一致

把查询落实到代码层面首先还是要先自己跑一下是否能成功,用head插件跑查询多少有点难受,kibana就非常好用,但是要注意这里有坑,同一个Get请求两边返回结果是不一致的,kibana查出的数据是你想要的,而head则查出所有数据。
原因如下:
在kibana上发的get请求实际上是发的post请求,会把body内容都带上,而head上你发get请求就真的发了个get并且不带上body,你实际上是不带条件的全索引查询。要真的验证查询语句,最好还是发post请求,因为实际上你的代码发的带参的es查询是发的post请求(此处看了源码,只要带了xml里的语句,就必发post)

2.head查询结果与bboss框架查询结果不一致,bboss es查询结果为空

其实原因和坑1是一样的,head查询发get请求没有带上body实际查询的是全部数据,而api发的是post请求,结果不一致或为空,其实post结果就是这个,你的es查询语句有问题,有问题的原因有很多,可以通过以下步骤一步步发现问题解决问题。

  • 把执行的查询语句打印出来,yml配置要加上spring.elasticsearch.bboss.showTemplate: true
    以及logging.level.org.bboss: info 、 logging.level.com.frameworkset:
    info 和 logging.level.org.frameworkset: info 以及
    ogging.level.org.apache: info 。

  • 如果你不用bboss自带的日志,就要在maven引入的时候exclusion掉slf4j

  • 将打印出来的语句直接到页面工具head或者kibana上执行,主要要用post请求,验证语句是否有问题,能否查出来你想要的数据,查不出来对吧,是不是用了分析器,并且你正在用分析器模糊搜索某个只有英文以及数字的东西,ik分词无法分割英文和数字,你执行一下index/_analyze用分析器跑一下你想要的识别的文本内容就知道了。到这把查询语句写对基本上就没问题了。

3.遇事不决先查官方文档,不要去瞎百度

elasticsearch更新迭代非常快,百度出来5.x 6.x版本现在根本不适用,7.9之后甚至没有了type,查来的语句一跑一个报错。
bboss官方文档:不仅包含了集成还有各种各样用法的举例与demo

总结

本来想放个我的demo链接上来,想想还是没必要,官方文档里有各种各样的demo,springboot的、非springboot的全都有,上去看看就行。

 类似资料: