ElasticSearch 倒排索引简析

内容概要

  • 倒排索引是什么?为何须要倒排索引?
  • 倒排索引是怎么工做的?

1. 倒排索引是什么?

假设有一个交友网站,信息表以下:数据库

美女1:“我要找在上海作 PHP 的哥哥。架构

须要匹配 性别、城市、语言列框架

美女2:“我要找北京的爱旅游、爱漂亮食的 JAVA 哥哥。分布式

更复杂了是吧,实际场景中,会有更复杂的排列组合。网站

对于这类的搜索,关系型数据库的索引就很难应付了,适合使用全文搜索的倒排索引。spa

倒排索引是一种数据库的索引形式,存储了 “内容 -> 文档” 映射关系,目的是快速的进行全文搜索。3d

2. 倒排索引是怎么工做的?

主要包括2个过程:blog

  • 建立倒排索引
  • 倒排索引搜索

2.1 建立倒排索引

举个例子,有2个文档:索引

  • Document#1
Recipe of pasta with sauce pesto
  • Document#2
Recipe of delicious carbonara pasta

先对文档进行分词,造成一个个的 token,也就是 单词,而后保存这些 token 与文档的对应关系。token

结果以下:

2.2 倒排索引搜索

搜索示例:

  • 搜索 “pasta recipe

先分词,获得2个 token,( “pasta”、“recipe” )。

而后去倒排索引中进行匹配。

这2个词在2个文档中都匹配,因此2个文档都会返回,并且分数相同。

  • 搜索 “carbonara pasta

一样,2个文档都匹配,都会返回。

此次 document#2 的分数要比 document#1 高。

由于 #2 匹配了2个词(“carbonara”、“pasta”),#1 只匹配了一个(“pasta”)。

2.3 转换

有时咱们能够在保存和搜索以前对 token 进行一些转换,最广泛的例如:

  • 扔掉中止词

中止词是那些使用量很是大,但又没有什么意义的词。

例如英文中的 “of”, “the”, “for” ……

  • 元素化

把单词处理为字典中的标准词,例如:

“running” => “run”

“walks” => “walk”

“thought” =>“think”

  • 词干分析

经过切断词尾将一个词转换成词根形式的过程。

不能处理不规则动词的状况,但能够处理字典中没有的词。


推荐阅读:

相关文章
相关标签/搜索