全文检索
倒排索引
根据文档创建索引,再对索引进行查询获取文档。
相比与顺序查询:不需要那么多的查询(一个文档一个文档找索引,找到就匹配,需要全部查询,效率很低),而且可以在索引上定位,出现在哪个文档哪个地方,支持高亮
Lucene
Lucene是一个基于Java的全文检索库,可以看成一个持久层框架,与Lucene索引交互
倒排索引存储信息
左边保存的是一系列字符串,称为词典。
每个字符串都指向包含此字符串的文档(Document)链表(每个节点还包含文档中出现该索引的频率),此文档链表称为倒排表(Posting List)。
如果我们需要查询包含两个索引的文档,只需要将两个文档共有的文档标号连接成链表
索引创建
- 对文档进行分词,使用Tokenizer ,得到
词元
分词器一般使用训练的模型,
Word
、IK
等
- 去除标点
- 去除停用词(我、是)
- 还需要把词元传递给语言处理器组件处理
英文:复数->单数,大写->小写
- 若索引库存在相同索引,需要合并成一个链表
索引查询
- 输入查询关键字词
keyword:Java
- 进行语法分析得到一棵语法分析树
- 搜索索引库,得到符合的文档以及索引的信息
- 得到文档后,根据频率,相关性排序,分数越高的排在越前面
过程
1. 索引过程:
1) 有一系列被索引文件
2) 被索引文件经过语法分析和语言处理形成一系列词(Term)。
3) 经过索引创建形成词典和反向索引表。
4) 通过