9月4日

下个星期菜谱:

毛豆炒肉,豆腐炒肉

山药炒肉,酸辣土豆丝炒肉

荷兰豆炒肉,香肠炒蒜苗

腐竹炒肉,日本豆腐


ElasticSearch 文档型数据库,索引定义了文档的逻辑存储和字段类型,

每个索引可以包含多个文档类型,文档类型是文档的集合,文档以索引定义的逻辑存储模型,

比如,指定分片和副本的数量,配置刷新频率,分配分析器等,

存储在索引中的海量文档分布式存储在ElasticSearch集群中。

全文搜索引擎就是通过从互联网上提取的各个网站的信息(以网页文字为主)而建立的数据库中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户。

Completion Suggester是Elasticsearch SearchAPIs中一种,主要用于输入框的自动补齐功能。

最后我们思考一下为什么Elasticsearch搜索推荐这么快。

原来索引并非通过倒排来完成,而是将分词过的数据编码成FST和索引一起存放。

对于一个open状态的索引,FST会被ES整个装载到内存里的,进行前缀查找速度极快。但是FST只能用于前缀查找,这也是Completion Suggester的局限所在。

搜索引擎中每个文件都对应一个文件ID,文件内容被表示为一系列关键词的集合实际上在搜索引擎索引库中,关键词也已经转换为关键词ID)

例如“文档1”经过分词,提取了20个关键词,每个关键词都会记录它在文档中的出现次数在文档中的出现次数出现位置。

倒排索引的结构如下:

​ “关键词1”:“文档1”的ID,“文档2”的ID,…………。

​ “关键词2”:带有此关键词的文档ID列表。

搜索引擎的索引其实就是实现“单词-文档矩阵”的具体数据结构。可以有不同的方式来实现上述概念模型,比如“倒排索引”、“签名文件”、“后缀树”等方式。但是各项实验数据表明,“倒排索引”是实现单词到文档映射关系的最佳实现方式

2.倒排索引基本概念

  • 文档(Document):一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象

相比网页来说,涵盖更多种形式,

比如Word,PDF,html,XML等不同格式的文件都可以称之为文档。

  • 文档集合(Document Collection):由若干文档构成的集合称之为文档集合。比如海量的互联网网页或者说大量的电子邮件都是文档集合的具体例子。
  • 文档编号(Document ID):在搜索引擎内部,会将文档集合内每个文档赋予一个唯一的内部编号,以此编号来作为这个文档的唯一标识,这样方便内部处理,每个文档的内部编号即称之为“文档编号”,后文有时会用DocID来便捷地代表文档编号。
  • 单词编号(Word ID):与文档编号类似,搜索引擎内部以唯一的编号来表征某个单词,

**倒排索引(Inverted Index)**:

倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。

倒排索引简而言之就是:每个单词都有相应的文档编号DocId

单词词典(Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。

倒排索引简单实例

假设文档集合包含五个文档,每个文档内容如图3所示,在图中最左端一栏是每个文档对应的文档编号。我们的任务就是对这个文档集合建立倒排索引。

中文和英文等语言不同,单词之间没有明确分隔符号,所以首先要用分词系统将文档自动切分成单词序列。

这样每个文档就转换为由单词序列构成的数据流,

为了系统后续处理方便,需要对每个不同的单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词,

在如此处理结束后,我们可以得到最简单的倒排索引(参考图3-4)。

“单词ID”一栏记录了每个单词的单词编号,

第二栏是对应的单词,

第三栏即每个单词对应的倒排列表。

比如单词“谷歌”,其单词编号为1,倒排列表为{1,2,3,4,5},说明文档集合中每个文档都包含了这个单词。


之所以说图4所示倒排索引是最简单的,是因为这个索引系统只记载了哪些文档包含某个单词,

而事实上,索引系统还可以记录除此之外的更多信息。

图5是一个相对复杂些的倒排索引,与图4的基本索引系统比,在单词对应的倒排列表中不仅记录了文档编号,还记载了单词频率信息(TF)

即这个单词在某个文档中的出现次数

之所以要记录这个信息,是因为词频信息在搜索结果排序时,计算查询和文档相似度是很重要的一个计算因子,所以将其记录在倒排列表中,以方便后续排序时进行分值计算。

在图5的例子里,单词“创始人”的单词编号为7,对应的倒排列表内容为:(3:1),其中的3代表文档编号为3的文档包含这个单词,数字1代表词频信息,即这个单词在3号文档中只出现过1次,其它单词对应的倒排列表所代表含义与此相同。