ElasticSearch 目前也算是非常火了,站内搜索、日志分析都会用到它,而且还可以直接当成 NoSQL 数据库来使用。
接下来,我们就通过下面这个简单介绍,开启 es 之旅吧~
公众号 : 倔强小狮子

1. 正排索引
- 在我们关系型数据库中见到的索引成为
"正序索引"
- 假设一个 表中
id | title | content |
---|
1 | 倔强的小狮子 | 正在学习 ElasticSearch |
2 | 倒叙索引 | 正在学习 |
3 | 正序索引 | 关系型数据库 |
- 那我们可以根据表中的数据进行建立索引
index | content |
---|
1 | 正在学习 ElasticSearch |
2 | 正在学习 |
3 | 关系型数据库 |
倔强的小狮子 | 正在学习 ElasticSearch |
倒叙索引 | 正在学习 ElasticSearch |
正序索引 | 关系型数据库 |
- 当我们通过Id进行查询或者标题查询时可以快速定位到 centent 内容进行进行检索出来(当然关系型数据库存在导致索引失效,快速定位不是必然的)
- 当然我们可以进行 内容模糊(like)去搜索,就只能去内容中做匹配,熟知 关系型中进行 lilke 查询时,效率会受到性能瓶颈, 所以考虑到 倒叙索引
- 可以理解成是通过索引查询内容
2.倒叙索引
- 为了创建倒排索引,我们首先将每个文档的 content 域拆分成单独的 词(我们称它为 词条 或 tokens ),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。结果如下所示
- 倒叙索引恰恰与正序索引相反,而是通过 内容分词后建立 Index (第二章讲解ES分词器),通过 Index 找到 文档Id, 然后通过文档 Id 找到文档
id | title | content |
---|
1 | 倔强的小狮子 | 正在学习 ElasticSearch |
2 | 倒叙索引 | 正在学习 |
3 | 正序索引 | 学习关系型数据库 |
- 倒叙索引后
index | doc id = 1 | doc id = 2 | doc id = 3 |
---|
正在 | √ | √ | |
学习 | √ | √ | √ |
ElasticSearch | √ | | |
正在学习 | √ | √ | |
关系型 | | | √ |
数据库 | | | √ |
- 假设我们搜索学习,ElasticSearch, 我们只需要查找包含每个词条的文档
index | doc id = 1 | doc id = 2 | doc id = 3 |
---|
学习 | √ | √ | √ |
ElasticSearch | √ | | |
- 两个文档都匹配,但是第一个文档比第二个匹配度更高。ES 使用仅计算匹配词条数量的简单
相似性算法
,那么,第一个文档比第二个文档更佳。 - ElasticSearch官网具体解释
- 通过 文档关键字就可以快速定位到 文档 id, 通过 文档id 进而可以找到文档
- 一般来说,倒排索引分为两个部分:
- 单词词典(记录所有的文档词项(content 中分词词项列表),以及词项到
倒排列表
的关联关系) - 倒排列表(记录单词与对应文档的结合关系,由一系列
倒排索引项
组成 - 倒排索引项指:
文档 id、词频(TF)
(TF词项在文档中出现的次数,评分时使用(该词典在文档中出现的频率会进行打分,评分越高相似度越高))、位置
(Position,后期短语查询会用到
, 词项在文档中分词的位置)、偏移
(记录词项开始和结束的位置,高亮显示时会用到,在搜索文档词项出现的位置前后加上标签)) - 当我们去索引一个文档时,就会建立倒排索引,搜索时,直接根据倒排索引搜索。
期待你的关注,和我一起学习
转载说明:转载携带原文链接