【简单理解】搜索引擎检索-倒排表(倒排索引)
简单介绍倒排索引
倒排索引(Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。
常见应用:搜索引擎、问答系统、对话系统。
图说倒排索引
这里首先引出一个例子来详细介绍倒排索引的思想和实现。
内容简化
假设用户有个搜索query:“苹果手机2020发布会时间”。百度的搜索结果如下:
现在我们把这个问题具体化。我们除了有要查询的query:“苹果手机2020发布会时间”。还有被查询的网页数据库。这里我们做个简化,假设我们的网页数据库内容只有如下4条:
网页1:
2020苹果手机第一场发布会时间确定
网页2:
苹果手机2020出什么机型
网页3:
2020新机发布会时间
网页4:
苹果在2020将推出四款新iPhone
关键词匹配
为了选取最理想的查询结果,最容易想到的方法就是关键词匹配了,简单的来说,就是网页中包含查询的关键词越多,网页和查询query的相关度也就越大。
在做关键词查询前,一般文本会先进行预处理。这里的预处理主要包括去停用词和分词。
去停用词
去除和查询不相关的内容,比如本例子中的标点符号。在其他场景中,除了标点符号也会去除一些特别的字或词。
分词
分词主要目的是将句子切长短语或关键字,这样才利于查询匹配。比如“苹果手机2020发布会时间”可以分词成:
苹果手机/2020/发布会/时间
当然网页也需要这样进行分词:
网页1:
2020/苹果手机/第一场/发布会/时间/确定
网页2:
苹果手机/2020/出什么/机型
网页3:
2020/新机/发布会/时间
网页4:
苹果/在/2020/将/推出/四款/新/iPhone/
分词是一项专门的技术,在实际工程中可以至今借助工具来完成,比如jieba分词。
分词处理后,我们用查询query中的关键词在网页数据库中进行关键词匹配,并统计匹配数目:
网页序号 | 匹配关键词 | 匹配个数 |
---|---|---|
网页1 | 2020,苹果手机,发布会,时间 | 4 |
网页2 | 苹果手机,2020 | 2 |
网页3 | 2020,发布会,时间 | 3 |
网页4 | 2020 | 1 |
从上述表格中容易确定,网页序号1就是和查询query最匹配的网页。
倒排索引
仔细考虑上面的关键词查询过程,会发现这种方法有个很大的效率问题:我们的例子中只有4个待查询的网页,而实际的互联网世界的网页数目是非常巨大的。假设互联网世界的网页数据为N,那么使用关键词查询的时间复杂度就是O(N),显然,这样的时间复杂度还是太大了,而倒排索引就很好的优化了这个问题。
从倒排索引这个名字很容易联想出它的实现,关键就是“倒排”的“索引”。在前面的讲解中,我们的索引(key)是网页,内容(value)是关键字。倒排索引就是反过来:内容关键字作为索引(key),所在网页作为内容(value)。前面的表格就可以改写成,
关键词 | 包含关键词的网页 |
---|---|
苹果手机 | 网页1,网页2 |
2020 | 网页1,网页2,网页3,网页4 |
发布会 | 网页1,网页3 |
时间 | 网页1,网页3 |
通过上面的表格,很明显网页1是包含最多关键词的网页,也是和查询query相关度最高的网页。采用倒排索引的方法,搜索的时间复杂度得到了明显的降低。