mysql8全文检索应用之二:Mybatis-Plus

这篇具有很好参考价值的文章主要介绍了mysql8全文检索应用之二:Mybatis-Plus。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


上篇( mysql8全文检索应用之一:参数设置)介绍了mysql服务器参数配置、full text索引,这篇介绍如何在Mybatis-Plus下应用全文检索。

1、mybatis-plus版本

最少要3.5.0版本以上,Mybatis-Plus 3.5.0版本以下的jsqlparser组件支持mysql 全文检索方面有bug,jsqlparser 4.3版本彻底修复了对mysql 全文检索(match() against ()语句)的支持,以下是Mybatis-Plus 3.5.0版本的更新日志:

[v3.5.0] 2022.01.01
  升级 mybatis 3.5.9
  升级 jsqlparser 4.3
  新增移除 Mapper 相关缓存,支持 GroovyClassLoader 动态注入 Mapper
  添加动态表名的钩子函数 #3965
  注入类 DefaultSqlInjector 优化调整
…………

在jsqlparser的issue#1356中,说明了4.3版本才完全修复了对mysql全文检索match() against ()语句的支持,有兴趣的可以去看看。
jsqlparser github的issue地址:https://github.com/JSQLParser/JSqlParser/issues/1356
mysql8全文检索应用之二:Mybatis-Plus

2、mapper.xml

	<!-- 全文索引检索 -->
	<select id="queryFulltext" resultType="vip.dazigo.mapper.article">
		select * from article
		<where>
			delete_flag=1
			<if test="queryStr != null" >
				and ( MATCH (title,content) against (#{queryStr}) )
			</if>
		</where>
		order by id desc
	</select>

3、mapper接口

   /**
     *  根据检索字符串进行全文检索
     *  <p>
     *      全文检索包含字段:title,content
     *  </p>
     * @param page
     * @param queryStr
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    IPage<Article> queryFulltext(Page<Article> page, @Param("queryStr")  String queryStr);

3.1 @InterceptorIgnore(tenantLine = “true”)

注意:—>>>如果项目使用了Mybatis-Plus的多租户插件TenantLineInnerInterceptor,有可能报错,如果出错就在接口方法上加上这个注解:@InterceptorIgnore(tenantLine = “true”)!!!
这个注解的作用是忽略租户sq拦截注入
mysql8全文检索应用之二:Mybatis-Plus

4、service方法

    /**
     *  根据搜索字符串进行全文检索
     *  <p>
     *      全文检索包含字段:title,content
     *  </p>
     * @param queryStr
     * @return
     */
    @Override
    public IPage<Article> queryFulltext(Page<Article> page, String queryStr){
        return articleMapper.queryFulltext(page,queryStr);
    }

5、controller方法

     /**
	 * 分页列表全文检索
	 *
	 * @param queryStr
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	@ApiOperation(value="文章-全文检索", notes="文章-全文检索")
	@GetMapping(value = "/queryFulltext")
	public Result<?> queryPageListFulltext(String queryStr,
											 @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
											 @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
		if (oConvertUtils.isEmpty(queryStr) || "".equals(queryStr.trim())){
			return Result.error("搜索字符串不能为空",null);
		}
		//搜索字符串处理xss攻击
		queryStr = XSSUtils.striptXSS(queryStr);
		Page<Article> page = new Page<Article>(pageNo, pageSize);
		IPage<Article> pageList = articleService.queryFulltext(page, queryStr);
		return Result.OK(pageList);
	}

6、Encountered unexpected token: “MATCH” “MATCH”

debug时如果遇到Encountered unexpected token: “MATCH” “MATCH”,不要慌,只是警告而已!!
debug日志如下:

net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "MATCH" "MATCH"
    at line 4, column 11.

Was expecting one of:

    "!"
    "("
    "NOT"

不放心的可以去Mybatis-Plus的issue里看看:
https://github.com/baomidou/mybatis-plus/issues/3294

到这里,就可以愉快的进行开发了~~~~~~~~

惯例宣传一下我的网站 :打字狗 dazigo.vip,传送门->> 打字练习,一个免费在线打字练习、打字测试的网站,打字还不太顺溜的朋友可以多去练习一下哦~~~~文章来源地址https://www.toymoban.com/news/detail-417538.html

到了这里,关于mysql8全文检索应用之二:Mybatis-Plus的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL——全文检索

    不是所有的数据表都支持全文检索 MySQL支持多种底层数据库引擎,但是并非所有的引擎支持全文检索 ,目前最常用引擎是是MyISAM和InnoDB;前者支持全文检索,后者不支持。 表productnotes : 1. 查询包含 rabbit 的行,并按照相关性排序  2.显示每一条的相关性值 3.有heavy 但是没有

    2024年04月15日
    浏览(45)
  • MySQL使用全文检索实现模糊搜索

    创建全文检索有两种方式 方式一: 方法二: in boolean mode(布尔模式): 可以为检索的字符串增加操作符,且不会像自然语言一样自动拆词查询并集(除非手动空格隔开) 全文检索模糊查询使用全文索引来提高搜索效率,可以快速查询大数据量中的模糊匹配结果。而LIKE模糊查

    2024年02月15日
    浏览(49)
  • Mysql 简单实现全文检索(FULLTEXT)

    版本支持 MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引; MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引; 只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。 按顺序操做: 1.修改数据库配置 etc/my.cnf 文件 [mysqld] 下面加入 ngram_token_s

    2024年02月09日
    浏览(42)
  • 【springboot微服务】Lucence实现Mysql全文检索

    目录 一、前言 1.1 常规调优手段 1.1.1 加索引 1.1.2 代码层优化 1.1.3 减少关联表查询

    2023年04月12日
    浏览(45)
  • docker安装的mysql更改全文检索分词配置

    这里使用的是mysql8.0+,默认使用ngram分词 这里是已经将文件从容器中挂载出来了,没挂载出来要去容器内部更改my.cnf文件并重启mysql容器 一、查看mysql的分词大小 ngram_token_size这里默认是2我已经改为1了 这个值代表分词大小 比如abc会分成ab和bc两个词,会导致检索单个词a、b、

    2024年02月16日
    浏览(44)
  • Mysql 实现类似于 ElasticSearch 的全文检索功能

    ​ 一、前言 今天一个同事问我,如何使用 Mysql 实现类似于 ElasticSearch 的全文检索功能,并且对检索跑分?我当时脑子里立马产生了疑问?为啥不直接用es呢?简单好用还贼快。但是听他说,数据量不多,客户给的时间非常有限,根本没时间去搭建es,所以还是看一下

    2024年02月03日
    浏览(45)
  • MySQL全文检索临时代替ES实现快速搜索

    引入 在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。 从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词。 全文索引只支持InnoDB和MyISAM引擎,支持的类型为C

    2024年02月07日
    浏览(48)
  • 基于Lucene的全文检索系统的实现与应用

    Lucene是一个开源的全文搜索引擎库,用于实现文本索引和搜索功能。它提供了强大的搜索和排序功能,可以用于构建各种类型的搜索应用程序,如网站搜索引擎、文档管理系统等。Lucene支持多种编程语言,并且具有高性能和可扩展性。它是许多其他搜索引擎和文本处理工具的

    2024年02月04日
    浏览(59)
  • 基于Solr的全文检索系统的实现与应用

    Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,

    2024年02月04日
    浏览(43)
  • MySQL全文索引:中文语义分词检索(相似度匹配)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 通常情况下,全文检索引擎我们一般会用ES组件(传送门:SpringBoot系列——ElasticSearch),但不是所有业务都有那么大的数据量、那么大的并发要求,MySQL5.7之后内置

    2023年04月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包