什么是倒排索引
1. 倒排索引在搜索中具有很重要的地位,更是搜索引擎的核心,本文主要简单介绍下倒排索引的相关概念
2. 以下面这本书为例
正排--目录
1. 正排索引就是指书的目录,在搜索引擎中,正排索引就是文档id到文档内容和单词的对应关系
倒排--索引页
1. 倒排索引是指书的附录中,每个词对应在哪个页码中出现过,这个就是倒排索引,即词与页码(文档id)的关系
在ES中的正排和倒排索引
倒排索引的核心组成
1. 倒排索引包含两个部分
1. 单词词典,记录所有文档的单词,记录单词到倒排列表的关联关系
单词词典一般比较大,可以通过B+树或者哈希拉链法实现,以满足高性能的插入与查询
2. 倒排列表,记录了单词对应的文档组合,由倒排索引项组成
倒排索引项:
1. 文档ID
2. 词频 TF -- 该单词在文档中出现的次数,用于相关性评分
3. 位置 Position -- 单词在文档中分词的位置,用户语句搜索
4. 偏移 Offest -- 记录单词的开始结束位置,实现高亮显示
Elasticsearch的倒排索引
1. Elasticsearch的JSON文档中每个字段都有自己的倒排索引,也可以指定某些字段不做索引
1. 优点:节省存储空间
2. 缺点:字段无法被搜索
分词 Analysis
1. 想要建立倒排索引,必不可少的就是分词,所以分词,也就是将文本转换为一系列单词的过程,一般通过分词器来实现这一过程
分词器 Analyzer
1. 分词器是专门处理分词的组件,分词器由三部分组成
1. Character Filter 针对原始文本进行处理,例如去除HTML标签,特殊字符等
2. Tokenizer 按照规则切分单词
3. Token Filters 将切分的单词进行加工,例如全部转为小写,删除停用词(stop words),增加同义词
Elasticsearch的内置分词器
使用 _analyzer API
Elasticsearch 的内置分析器
Standard Analyzer
Simple Analyzer
Stop Analyzer
Whitespace Analyzer
Keyword Analyzer
Pattern Analyzer
Language Analyzer
ICU Analyzer 中文分词
1. 中文分词相比于英语分词无疑要更难一些
1. 中文句子要切分成一个一个的词(不是一个个字)
2. 英文中,单词有自然的空格作为分隔
3. 一句中文,在不同的上下文,有不同的理解,比如下面的例子
这个苹果,不大好吃 / 这个苹果,不大,好吃
2. 在Elasticsearch中使用中文分词需要安装 plugin插件
中文分词示例
更多的中文分词器
1. IK
1. 支持自定义词库,支持热更新分词字典
2. 地址: https://github.com/medcl/elasticsearch-analysis-ik
2. THULAC
1. 清华大学自然语言处理和社会人文计算实验室的一套中文分词器
2. https://github.com/microhun/elasticsearch-thulac-plugin
更多内容欢迎关注我的个人公众号“韩哥有话说”,100G人工智能学习资料,大量后端学习资料等你来拿。