一.执行流程
0.图解
1.创建索引
(1)获取原始文档
基于那些文档进行搜索,那就是原始文档。
通过爬虫可以获取原始文档。
(2)构建文档对象
对应每一个原始文档,并创建一个document对象。
一个document对象可以有多个域(field)。
域中保存的就是原始文档的属性。
其中属性包含域的名称和域的值。
每个文档都有唯一的编号,就是文档id。
(3)分析文档
就是分词的过程。
1.将根据空格将字符串进行分隔,得到一个单词列表。
2.把单词统一变成小写。
3.去除标点符号。
4.去除停用词。停用词指的是无意义的词。
5.每个关键词封装成一个Term对象。Term对象包含一个关键词所在的域,一个关键词本身。
注意:不同的域拆分出相同的关键词是不同的Term对象。
(4)创建索引
基于关键词列表来创建一个索引。保存到索引库中。
索引库内含:
- 索引
- document对象
- 关键词和文档的对应关系
通过词语找文档,这种索引结果称之为倒排索引结构。
2.查询索引
(1)用户查询接口
用户输入查询条件的地方。
(2)把关键词封装成一个查询对象
需要包含俩个条件
条件一:查询的域
条件二:查询的关键词
(3)执行查询
根据要查询的关键词到对应的域上进行搜索。
找到关键词,根据关键词找到对应的文档。
(4)渲染结果
根据文档的id找到文档对象。
根据关键词进行高亮显示,分页处理等。
二.入门程序
1.创建索引
(1)环境
下载Lucene
安装lucene的jdk版本不低于1.8。
链接:https://pan.baidu.com/s/1QhoQO1Zjl57lKX1KsfXzjQ
提取码:aq4r
(2)工程搭建
- 创建一个java工程
- 添加jar包
lucene-analyzers-common-7.4.0.jar
lucene-core-7.4.0.jar
commons-io.jar
(3)步骤
1.创建一个Director对象,指定索引库的位置。F:\temp
2.基于Director对象创建一个IndexWriter对象。
3.读取磁盘上的原始文件,对应每个文件创建一个文档对象。
4.向文档对象添加域。
5.把文档对象写到索引库。
6.关闭indexwriter对象。
(4)范例
第一步导入依赖
第二步LuceneFirst类
2.使用Luke查询索引库,要求jdk版本1.9
(1)使用说明
(2)索引库信息页
(3)文件信息页
(4)域的信息页
(5)搜索信息页
3.查询索引库
(1)步骤
1.创建一个Director对象,指定索引库的位置。
2.创建一个IndexReader对象。
3.创建一个IndexSearcher对象,构造方法参数中的参数IndexReader对象。
4.创建一个Query对象。TeamQuery。
5.执行查询,得到一个TopDocs对象。
6.取出查询结果的总记录数。
7.取文档列表。
8.打印文档中的内容。
9.关闭IndexReader对象。