最近接手了一个新项目组的项目,里面用到了elasticsearch,主要的使用场景是搜索引擎,我们项目中则使用在用户搜索和动态搜索。由于之前没有接触过这块内容,特地向同事请教了一下,他告诉我要理解这个首先得理解(Inverted Index)倒排索引。
举例说明:我们在搜索引擎搜索”2021年音乐节“返回的结果可能是下面这样的 可以看到搜索引擎返回的数据有些是完全匹配了我们的搜索内容,有些则是部分匹配了,这是因为搜索引擎对我们的搜索内容做了分词。比如我们的搜索关键字就可以简单的分成 2021/音乐节。 分词完成后我们用关键字去数据库中匹配对应的记录就应该是这样:
序号 | 关键字 |
---|---|
1 | 2021、音乐节 |
2 | 2021、音乐节 |
3 | 音乐节 |
4 | 2021、音乐节 |
5 | 2021、音乐节 |
正常情况下我们可能会对数据库中的数据遍历然后去匹配含有关键词的记录,如果记录很多的话(肯定会很多)这样会导致查询的时间非常的长。
倒排索引
关键词 | 网页 |
---|---|
2021 | 1、2、4、5 |
音乐节 | 1、2、3、4、5 |
而倒排索引会使用关键字作为索引,返回相关的网页位置,然后可以通过返回的位置去查数据,这样时间就会大大缩短。
还有一个个人看到比较形象的例子:
正序索引:书的目录是正序索引
倒序索引:而书的最后面的索引则是类似于倒排索引
最后,总结一下,所谓倒排索引就是使用关键词去分组,记录文档位置信息,从而提高检索效率。