Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论,Lucene是现在并且是这几年,最受欢迎的免费Java信息检索程序库。
另外,Lucene不提供爬虫功能,如果需要获取内容需要自己建立爬虫应用。 Lucene只做索引和搜索工作。
需要领取这份阿里架构师耗时一年整理的《Lucene高级学习文档》的朋友可以点进去了解一下,点击——【传送门】——即可。
内容结构分为13个部分。
目录如下:
一、搜索技术理论基础
Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
- 为什么要学习Lucene
- 数据查询方法
- 全文检索技术应用场景
二、Lucene介绍
计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
- 什么是全文检索
- 什么是Lucene
- Lucene官网
三、Lucene全文检索的流程
- 索引和搜索流程图
- 索引流程
- 搜索流程
四、Lucene入门
- Lucene准备
- 开发环境
- 创建Java工程
- 索引流程
- 使用Luke查看索引
- 搜索流程
五、Field域类型
Field是文档中的域,包括Field名和Field值两部分,一个文档可以包括多个Field,Document只是Field的一个承载体,Field值即为要索引的内容,也是要搜索的内容。
- Field属性
- Field常用类型
- Field修改
六、索引维护
管理人员通过电商系统更改图书信息,这时更新的是关系数据库,如果使用lucene搜索图书信息,需要在数据库表book信息变化时及时更新lucene索引库。
- 需求
- 添加索引
- 修改索引
- 删除索引
七、分词器
在对Document中的内容进行索引之前,需要使用分词器进行分词 ,分词的目的是为了搜索。分词的主要过程就是先分词后过滤。
- 分词理解
- Analyzer使用时机
- Lucene原生分词器
- 第三方中文分词器
八、Lucene高级搜索
QueryParser支持默认搜索域,第-个参数为默认搜索域.如果在执行parse方法的时候,查询语法中包含域名则从指定的这个域名中搜索,如果只有查询的关键字,则从默认搜索域中搜索结果.
- 文本搜索
- 數值范围搜索
- 組合搜索
九、搜索案例
- 引入依赖
- 项目加入页面和资源
- 创建包和启动类
- 配置文件
- 业务代码
十、Lucene底层储存结构(高级)
- 详细理解lucene存储结构
- 索引库物理文件
- 索引库文件扩展名对照表
- 词典的构建
十一、Lucene优化(高级)
- confifig.setMaxBufffferedDocs(100000); 控制写入一个新的segment前内存中保存的document的数目,设置较大的数目可以加快建索引速度。(数值越大索引速度越快, 但是会消耗更多的内存)
- indexWriter.forceMerge(文档数量); 设置N个文档合并为一个段(数值越大索引速度越快, 搜索速度越慢; 值越小索引速度越慢, 搜索速度越快)
- 解决大量磁盘IO
- 选择合适的分词器
- 选择合适的位置存放索引库
- 搜索api的选择
十二、Lucene相关度排序(高级)
Lucene对查询关键字和索引文档的相关度进行打分,得分高的就排在前边。
十三、Lucene使用注意事项(高级)
- 关键词区分大小写 OR AND TO等关键词是区分大小写的,lucene只认大写的,小写的当做普通单词。
- 读写互斥性 同一时刻只能有一个对索引的写操作,在写的同时可以进行搜索
- 文件锁 在写索引的过程中强行退出将在tmp目录留下一个lock文件,使以后的写操作无法进行,可以将其手工删除
- 时间格式 lucene只支持一种时间格式yyMMddHHmmss,所以你传一个yy-MM-dd HH:mm:ss的时间给lucene它是不会当作时间来处理的
- 设置boost 有些时候在搜索时某个字段的权重需要大一些,例如你可能认为标题中出现关键词的文章比正文中出现关键词的文章更有价值,你可以把标题的boost设置的更大,那么搜索结果会优先显示标题中出现关键词的文章
需要领取这份阿里架构师耗时一年整理的《Lucene高级学习文档》的朋友可以点进去了解一下,点击——【传送门】——即可。