全文检索步骤
数据分为两种:结构化数据和非结构化数据;
结构化数据:有规律的,固定格式,有限长度的,数据库,原文件等。
非结构化数据:没有固定格式,长度的,磁盘上的文件,这种数据不是很好查,可以使用全文检索;
全文检索: 将非结构化的数据中的一部分信息提取出来,重新组织,使其变得有一定结构,称为索引。先创建索引在对索引进行搜索的过程,叫全文检索。
全文检索采用的是倒排索引(通过词语找查找文档,再找文档名)的方式去查;
全文检索的手段:Lucene 是apache旗下的开放源代码的全文检索的工具包。
Lucene使用流程:
1.创建索引
原始文档->获取文档->创建文档对象->分析文档->创建索引;
2.查询索引
创建索引接口->创建查询索引的对象->执行查询->渲染结果;
1、创建索引
场景:给磁盘的文件创建索引
步骤:
1、指定索引库位置 Directory
2、创建写入索引的对象 IndexWriter
3、获取源文档IO流
4、把文档写入索引库 indexWriter.addDocument(doc);
5、关闭资源IndexWriter
2、查询索引步骤
1、指定索引库的位置 Directory
2、创建读取索引对象 IndexWriter
3、创建查询索引对象 IndexSearcher
4、执行查询方法 search方法
5、获取查询结果 TopDocs
6、关闭资源IndexWriter
分词器 Analyzer 每个分词器tokenStream方法
Analyzer analyzer = new StandardAnalyzer(); //英文按照空格分词,中文一个字一个字
Analyzer analyzer = new CJKAnalyzer(); //中文两个字两个字
需要导入lucene-analyzers-smartcn-4.10.3.jar
Analyzer analyzer = new SmartChineseAnalyzer(); //中文还可以,但是英文容易出现缺字母
第三方分词器IK-Analyzer(推荐使用的,有两个配置文件)
需要导入jar IKAnalyzer2012FF_u1.jar
Analyzer analyzer = new IKAnalyzer();
分词器的使用时机;1.创建索引库
2.查询时也会用到分词器
document就是一个网页,一个文档,或者一个表中的一条数据。
fileld 就是属性 相对一个表中的数据,一个域对于的就是一个列
分词器 IK-analyzer 中英文处理得当