Springboot + Lucene实现全文检索
type
status
date
slug
summary
tags
category
icon
password
本文仅介绍Springboot如何集成lucene并实现全文检索、高亮检索和分页检索,至于lucene详细情况请看后续文章。
JDK:8
SpringBoot: 2.7.3
先看项目结构

0.准备数据
1.引入相关依赖
这里需要注意lucene的版本和jdk版本,高版本的lucene(9.3.0及以后)使用了Java11,本文以Jdk8为准。
2.配置Lucene和IK分词器
为了避免频繁创建IndexWriter、IndexSearch和Analyzer等实例,这里配置为bean,交由Spring管理。注意,IndexSearcher需要及时获取索引的更改,否则只能查到启动时第一次加载的索引,因此将它托管给SearchManager,并创建守护线程,定时让SearchManager更新IndexSearch的索引库,这个时间是可以自定义的,这里设置的上限是5秒,下限是25毫秒
3.创建dao层mapper及CRUD方法
这里就不详细展示了,自己根据表结构创建对应model和mapper接口,本文使用了MybatisPlus.
4.初始化创建索引
继承
ApplicationRunner ,在项目启动时将数据库中的数据取出来,创建索引5.各种功能实现
IK扩展词处理
IK扩展词,简单来说就是让IK分词器单独加载额外的词典,这个词典中词不会被IK分词器再分词,认为是一个整体。
举个例子,对于“MySQL数据库”这个词,正常来说,IK分词器可能会将其分为“MySQL”和“数据库”两个词,但有时我认为它们就是一个词,不该再分,就需要将“MySQL数据库”加入IK扩展词中。另外,对于
的,和,了这些分词检索没有太大意义的词,我们可以过滤掉,不参与检索。具体使用方式如下:

依据上图,在资源目录下新增三个文件。
IKAnalyzer.cfg.xmlextend.dicstop.dic注意,设置扩展词后,需重新创建索引,否则不生效,并且要确保IK扩展词这三个文件在打包时,必须要打进包中。
📎 参考文章
- GitTalk