推荐系统[九]项目技术细节讲解z1:Elasticsearch 如何进行快速检索(ES倒排索引和分词原理)以及倒排索引在召回中的应用。

95 阅读1分钟

1.倒排索引

索引,初衷都是为了快速检索到你要的数据。(加快查询和搜索速度),在信息检索领域使用比较广泛。核心的需求是:如何从超大规模的内容库中召回匹配关键字的结果。

在mysql的索引,如果对某一个字段加了索引,一般来说查询该字段速度是可以有显著的提升。每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不同的使用场景和数据结构,需要用不同的索引,才能起到最大化加快查询的目的。 对 Mysql 来说,是 B+ 树,对 Elasticsearch/Lucene 来说,是倒排索引。

比如,在谷歌中搜索包含 ”推荐系统“ 关键字的内容。最直观的做法是针对数据库中所有内容一条一条匹配。但这样查找复杂度至少是O(n) ,面对成千上亿的海量数据,效率上远远达不到要求。因此,搜索引擎常规做法都是预先针对内容建立一个关键字索引。记录关键字对应的文档Id,位置,甚至是权重(分数),查询的时候,直接到表中获取关键字的文档列表,倒排索引一般使用hash索引结构,查询复杂度O(1) 。可以极大减少检索时间。

在这里插入图片描述

1.1 正排索引和倒排索引区别

正排索引(Forward Index)和倒排索引(Inverted Index)是信息检索系