Elasticsearch学习之路(七)_倒排索引与分词

119 阅读3分钟

什么是倒排索引

1. 倒排索引在搜索中具有很重要的地位,更是搜索引擎的核心,本文主要简单介绍下倒排索引的相关概念
2. 以下面这本书为例

image-20210331143636224

正排--目录

1. 正排索引就是指书的目录,在搜索引擎中,正排索引就是文档id到文档内容和单词的对应关系

image-20210331143711046

倒排--索引页

1. 倒排索引是指书的附录中,每个词对应在哪个页码中出现过,这个就是倒排索引,即词与页码(文档id)的关系

image-20210331143920639

在ES中的正排和倒排索引

image-20210331144316330

倒排索引的核心组成

1. 倒排索引包含两个部分
	1. 单词词典,记录所有文档的单词,记录单词到倒排列表的关联关系
		单词词典一般比较大,可以通过B+树或者哈希拉链法实现,以满足高性能的插入与查询
	2. 倒排列表,记录了单词对应的文档组合,由倒排索引项组成
		倒排索引项:
			1. 文档ID
			2. 词频 TF -- 该单词在文档中出现的次数,用于相关性评分
			3. 位置 Position -- 单词在文档中分词的位置,用户语句搜索
			4. 偏移 Offest -- 记录单词的开始结束位置,实现高亮显示

image-20210331145303207

Elasticsearch的倒排索引

1. Elasticsearch的JSON文档中每个字段都有自己的倒排索引,也可以指定某些字段不做索引
	1. 优点:节省存储空间
	2. 缺点:字段无法被搜索

分词 Analysis

1. 想要建立倒排索引,必不可少的就是分词,所以分词,也就是将文本转换为一系列单词的过程,一般通过分词器来实现这一过程

分词器 Analyzer

1. 分词器是专门处理分词的组件,分词器由三部分组成
	1. Character Filter 针对原始文本进行处理,例如去除HTML标签,特殊字符等
	2. Tokenizer 按照规则切分单词
	3. Token Filters 将切分的单词进行加工,例如全部转为小写,删除停用词(stop words),增加同义词

Elasticsearch的内置分词器

image-20210331150923526

使用 _analyzer API

image-20210331151013117

Elasticsearch 的内置分析器

image-20210331152107087

Standard Analyzer

image-20210331152136436

Simple Analyzer

image-20210331152222984

Stop Analyzer

image-20210331152524127

Whitespace Analyzer

image-20210331152426162

Keyword Analyzer

image-20210331152706457

Pattern Analyzer

image-20210331152901168

Language Analyzer

image-20210331152933016

ICU Analyzer 中文分词

1. 中文分词相比于英语分词无疑要更难一些
	1. 中文句子要切分成一个一个的词(不是一个个字)
	2. 英文中,单词有自然的空格作为分隔
	3. 一句中文,在不同的上下文,有不同的理解,比如下面的例子
		这个苹果,不大好吃 / 这个苹果,不大,好吃

2. 在Elasticsearch中使用中文分词需要安装 plugin插件

image-20210331153312363

中文分词示例

image-20210331160558697

更多的中文分词器
1. IK
	1. 支持自定义词库,支持热更新分词字典
	2. 地址: https://github.com/medcl/elasticsearch-analysis-ik
2. THULAC
	1. 清华大学自然语言处理和社会人文计算实验室的一套中文分词器
	2. https://github.com/microhun/elasticsearch-thulac-plugin

更多内容欢迎关注我的个人公众号“韩哥有话说”,100G人工智能学习资料,大量后端学习资料等你来拿。

qrcode_for_gh_3214f9e3470a_258.jpg