ElasticSearch(7)---倒排索引

在这里插入图片描述

上一篇: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
…… ……

反向索引不仅能够记录某个单词在文档中出现的位置,还可以记录在文档中出现的次数。比如上表中的OnDoc1中出现1次,单词youDoc4中出现了2次。

2.ElasticSearch为什么不用正向索引?

  如果使用正向索引,用户在输入搜索关键词的时候,会遍历所有的文档,找出包含该关键词的文档。再向用户进行数据响应。但是ElasticSearch往往是用来处理一些拥有海量数据的应用需求(如百度搜索等),使用正向索引效率太低,无法实时响应数据。所以此时使用反向索引(倒排索引)更加合理。

3.倒排索引案例

  现在有下面这样一个栗子,我们需要对下面图中所示的文档建立倒排索引。(图片来源于网络)

在这里插入图片描述
使用分词器将文档中的内容进行单词切分。并记录出现这些单词的文档编号。
在这里插入图片描述
如果现在某用户想要搜索谷歌,那么就可以直接找到出现谷歌单词的文档有:1,2,3,4,5。倒排索引不仅能够记录关键词的位置信息,还可以记录关键词出现的频率。比如下图中的Wave在文档4中出现了1次,拉斯在文档3中出现了1次,在文档5中出现了1次。

在这里插入图片描述
在进行搜索结果展示的时候,会根据索引的匹配度来进行打分,分数越高,排名越高。
如现在搜索谷歌加盟网站

单词 文档1 文档2 文档3 文档4 文档5
谷歌 * * * * *
加盟 * * *
网站 *

按照上图表中的星号分布所示,文档5打分最高,匹配度最高。

下一篇:ElasticSearch(8)—分词器
原文地址:https://www.cnblogs.com/wgty/p/12810407.html