上一篇:ElasticSearch(6)—Kibana插件
1.正向索引和反向索引
涉及到索引的概念的时候,首先需要知道,索引可以分为正向索引和反向索引(也可以理解为倒排索引)。
正向索引:
正向索引可以简单理解为从文档到单词。例如现在有4个文档,
Doc | Words |
---|---|
Doc1 | On the road of life |
Doc2 | never retreat from the whole body |
Doc3 | enjoy its achievements and get something for nothing |
Doc4 | If you don’t work hard, you’re out |
建立正向索引就会先解析每个文档中出现的单词,然后建立从文档到单词的映射关系。
Doc | Words |
---|---|
Doc1 | On,the, road, of, life |
Doc2 | never ,retreat, from, the, whole, body |
Doc3 | enjoy ,its, achievements, and, get, something, for, nothing |
Doc4 | If ,you, do ,not, work hard, you are out |
反向索引:
反向索引可以简单理解为从单词到文档。还是以上面4个文档为例,建立反向索引 就会建立单词到文档的映射关系
Word | Doc |
---|---|
On | Doc1, |
the | Doc1,Doc2, |
road | Doc1 |
…… | …… |
反向索引不仅能够记录某个单词在文档中出现的位置,还可以记录在文档中出现的次数。比如上表中的On
在Doc1
中出现1次,单词you
在Doc4
中出现了2次。
2.ElasticSearch为什么不用正向索引?
如果使用正向索引,用户在输入搜索关键词的时候,会遍历所有的文档,找出包含该关键词的文档。再向用户进行数据响应。但是ElasticSearch往往是用来处理一些拥有海量数据的应用需求(如百度搜索等),使用正向索引效率太低,无法实时响应数据。所以此时使用反向索引(倒排索引)更加合理。
3.倒排索引案例
现在有下面这样一个栗子,我们需要对下面图中所示的文档建立倒排索引。(图片来源于网络)
使用分词器将文档中的内容进行单词切分。并记录出现这些单词的文档编号。
如果现在某用户想要搜索谷歌
,那么就可以直接找到出现谷歌
单词的文档有:1,2,3,4,5
。倒排索引不仅能够记录关键词的位置信息,还可以记录关键词出现的频率。比如下图中的Wave
在文档4中出现了1次,拉斯
在文档3中出现了1次,在文档5中出现了1次。
在进行搜索结果展示的时候,会根据索引的匹配度来进行打分,分数越高,排名越高。
如现在搜索谷歌加盟网站
单词 | 文档1 | 文档2 | 文档3 | 文档4 | 文档5 |
---|---|---|---|---|---|
谷歌 | * | * | * | * | * |
加盟 | * | * | * | ||
网站 | * |
按照上图表中的星号分布所示,文档5打分最高,匹配度最高。