1.概念
开发源代码的全文检索引擎工具包,提供完整的查询引擎、索引引擎、部分文本分析引擎;lucene的目的是为软件开发人员提供一个简单易用的工具包(jar),以方便的在目标系统中实现全文检索功能。
2.应用场景
单机软件的搜索,站内搜索,垂直领域的搜索,专业搜索引擎公司
3.搜索数据方式
顺序扫描法/倒排索引
倒排索引:
提取资源中关键信息,建立索引(目录)
搜索时,根据关键字(目录),找到资源的位置
文档编号、单次编号、倒排索引(单次词典和倒排文件)、单次词典、倒排文件
单词-文档矩阵的基本模型
4.创建倒排索引过程
4.1.提取文档中关键信息,并给文档编号
4.2.将文档转换为纯文本(如果非文本格式则需要转换)
4.3.对纯文本进行中文分词
4.4.将文档id和词汇进行配对,保存为倒排序表
5.倒排索引结构
5.1.基本:两张表
5.1.1 文档编号 文档内容
5.1.2 单词ID、单词、倒排列表(文档编号集合)
5.2复杂倒排索引结构
5.2.1 文档编号、文档内容
5.2.2 单词ID、单词、倒排列表(文档编号+词条频率集合)
5.3完整倒排索引结构(完备)
5.3.1 文档编号、文档内容
5.3.2 单词ID、单词、文档频率、倒排列表(文档编号+词条频率+文档中出现位置[分词后的位置])
6.lucene与搜索引擎的区别
lucene是一套用java或其它语言写的全文检索工具吧,为应用程序提供了很多个api接口去调用;搜索引擎是一个全文检索系统,它是一个单独运行的软件系统。
7.lucne主要包
包名
|
功能
|
org.apache.lucene.analysis
| 语言分析器,主要用于的切词
Lucene提供的分析器实现类在:
lucene-analyzers-common-4.10.3.jar
|
org.apache.lucene.document
|
索引存储时的文档结构管理,类似于关系型数据库的表结构
|
org.apache.lucene.index
|
索引管理,包括索引建立、删除等
|
org.apache.lucene.queryParser
|
查询分析器,实现查询关键词间的运算,如与、或、非等, 生成查询表达式,
|
org.apache.lucene.search
|
检索管理,根据查询条件,检索得到结果
|
org.apache.lucene.store
|
数据存储管理,包括一些I/O操作
|
org.apache.lucene.util
|
公用类
|
8.lucene创建索引
创建索引流程(将数据保存到索引库中,会对这些数据创建索引)
步骤:
1.创建Document对象(创建pojo)
2.在Document对象中添加字段(设置pojo的属性值)
3.创建建立索引的对象IndexWriter(sqlSession)
4.通过IndexWriter将Document保存到索引库中(添加索引到索引库)(插入)
9.检索的流程
9.1定义检索内容(查询的关键字)
9.2将检索内容转换成Query对象
9.3创建检索的对象(IndexSearcher)
9.4通过IndexSearcher进行检索---search方法
9.5检索完成后,返回一个结果集
9.6遍历结果集
10.需要的jar包
10.1 analysis -- 分词器
10.2 core -- 核心包
10.3 highlighter -- 高亮包
10.4 queryparse -- 检索包
11.注意点
11.1 是否存储与是否切词没有关系
11.2 FSDirectory指定磁盘索引库,RAMDirectory指定内存索引库
11.3 停用词是为了节省存储空间和提高搜索效率,搜索引擎在索引页面或处理搜索请求时会自动忽略的字或词(语气助词、副词、介词、连接词等)
11.4 StandardAnalyzer按照中文一个字一个字进行分词,CJKAnalyzer为二分法分词,按照两个字进行切分,第三方中文分词器:IK-analyzer
11.5 查询时用的分词器要与创建索引时所用分词器保持一致。
11.6 QueryParser指定单个字段并分词检索,MultiFieldQueryParser指定多个字段并分词检索