倒排索引

搜索引擎-倒排索引基础知识

自古美人都是妖i 提交于 2020-03-31 07:35:50
搜索引擎的索引 1.单词——文档矩阵 单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义。图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系。 图3-1 单词-文档矩阵 从纵向即文档这个维度来看,每列代表文档包含了哪些单词,比如文档1包含了词汇1和词汇4,而不包含其它单词。从横向即单词这个维度来看,每行代表了哪些文档包含了某个单词。比如对于词汇1来说,文档1和文档4中出现过单词1,而其它文档不包含词汇1。矩阵中其它的行列也可作此种解读。 搜索引擎的索引其实就是实现“单词-文档矩阵”的具体数据结构。可以有不同的方式来实现上述概念模型,比如“倒排索引”、“签名文件”、“后缀树”等方式。但是各项实验数据表明,“倒排索引”是实现单词到文档映射关系的最佳实现方式,所以本章主要介绍“倒排索引”的技术细节。 2.倒排索引基本概念 文档(Document):一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖更多种形式,比如Word,PDF,html,XML等不同格式的文件都可以称之为文档。再比如一封邮件,一条短信,一条微博也可以称之为文档。在本书后续内容,很多情况下会使用文档来表征文本信息。 文档集合(Document Collection):由若干文档构成的集合称之为文档集合

这就是搜索引擎--读书笔记四--索引基础

ぐ巨炮叔叔 提交于 2020-03-31 07:32:19
搜索引擎索引基础 前几天我阅读了搜索引擎索引这一章,发现倒排索引这一方法确实很巧妙和迷人,它包含的原理和设计方法很独到。所以接下来,我想把我学习到的索引方面的知识给大家讲解一下,总共分为三篇: 索引基础 、 索引建立和更新 、 索引查询 。 我们首先认识倒排索引基本概念 文档 : 一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖了更多形式,比如Word、PDF、HTML、XML等不同格式的文件都可以称为文档。 文档集合 :由若干文档构成的集合称为文档集合。 文档编号 :在搜索引擎内部,会为文档集合中每一个文档赋予一个唯一的内部编号,以此编号来作为文档的唯一标识,这样方便内部处理。每个文档的内部编号称为文档编号。 单词编号 :和文档编号类似,单词编号可以作为某个单词的唯一表征。 倒排索引 :倒排索引是实现单词—文档矩阵的一种具体存储形式。通过倒排索引,可以通过单词快速获取包含这个单词的文档列表。倒排索引由两个部分组成:单词词典和倒排文件。 单词词典 :搜索引起通常的索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息及指向倒排列表的指针(还记得链表吗?亲)。 倒排文件 :所有单词的倒排列表往往顺序的存储在磁盘的某个文件里,这个文件即被称为倒排文件

hadoop倒排索引

牧云@^-^@ 提交于 2020-03-18 04:48:05
1.前言 学习hadoop的童鞋,倒排索引这个算法还是挺重要的。这是以后展开工作的基础。首先,我们来认识下什么是倒拍索引: 倒排索引简单地就是:根据单词,返回它在哪个文件中出现过,而且频率是多少的结果。这就像百度里的搜索,你输入一个关键字,那么百度引擎就迅速的在它的服务器里找到有该关键字的文件,并根据频率和其他一些策略(如页面点击投票率)等来给你返回结果。这个过程中,倒排索引就起到很关键的作用。 2.分析设计 倒排索引涉及几个过程:Map过程,Combine过程,Reduce过程。下面我们来分析以上的过程。 2.1Map过程 当你把需要处理的文档上传到hdfs时,首先默认的TextInputFormat类对输入的文件进行处理,得到文件中每一行的偏移量和这一行内容的键值对<偏移量,内容>做为map的输入。在改写map函数的时候,我们就需要考虑,怎么设计key和value的值来适合MapReduce框架,从而得到正确的结果。由于我们要得到单词,所属的文档URL,词频,而<key,value>只有两个值,那么就必须得合并其中得两个信息了。这里我们设计key=单词+URL,value=词频。即map得输出为<单词+URL,词频>,之所以将单词+URL做为key,时利用MapReduce框架自带得Map端进行排序。 下面举个简单得例子: 图1 map过程 输入/输出 2.2

正排索引和倒排索引

北城以北 提交于 2020-02-27 01:36:09
倒排索引为什么叫倒排索引? - 水無刹那的回答 - 知乎 https://www.zhihu.com/question/23202010/answer/254503794 正排索引和倒排索引 何为倒排 一句话总结 正排索引:一个未经处理的数据库中,一般是以文档ID作为索引,以文档内容作为记录。 倒排索引:Inverted index,指的是将单词或记录作为索引,将文档ID作为记录,这样便可以方便地通过单词或记录查找到其所在的文档。 倒排索引的过程 创建倒排索引,分为以下几步: 倒排索引创建索引的流程 形成文档列表 1) lucene首先对原始文档数据进行编号(DocID),形成列表,就是一个文档列表 创建倒排索引列表 2)对文档中数据进行分词,得到词条。对词条进行编号,以词条创建索引。保存包含这些词条的文档的编号信息。 谷歌之父–> 谷歌、之父 搜索的过程 当用户输入任意的词条时,首先对用户输入的数据进行分词,得到用户要搜索的所有词条,然后拿着这些词条去倒排索引列表中进行匹配。找到这些词条就能找到包含这些词条的所有文档的编号。 然后根据这些编号去文档列表中找到文档 正排和倒排 正排索引(正向索引) ID查文档中的各个词:url -> term,ID为关键字,后面的拉链为文档里面每个字的位置信息 正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息

Elasticsearch常用命令

和自甴很熟 提交于 2020-02-08 22:17:48
Elasticsearch查询语法 关于倒排索引的一点思考: ES在保存文档时,会将原始文档通过_source字段保存,同时构建倒排索引,保存词项跟文档ID的关系。那么接下来有一个问题: 一个Type有一个倒排索引,还是一个Field对应一个倒排索引 ? 假设一个Type一个倒排索引,那么文档中所有分词的字段,都会进入这个唯一的倒排索引表里。举个例子,Type包含title字段和content字段,文档A的title和content都包含java这个词项,文档B只有content中包含java这个词项,那么在这个唯一的倒排索引表中,java词项对应A、B两个文档,你如果查询title中包含java词项时,ES就不知道要给你返回文档A还是B了!!! 所以,倒排索引是在Field维度,那么在组合查询时,即有多个查询条件,ES是如何处理的呢?比如查询title中包含java词项,content中包含作者Bruce Eckel的文档。那么,假设title的倒排索引表里,包含java的文档有A、B、C,在content的倒排索引里包含Bruce Eckel的文档有A、D、E,那么计算这2个倒排索引表结果的交集,即A就是满足条件的文档。 故在组合查询时,最终的结果为每个查询子项结果集的交集 cat API 查询当前ES集群相关的消息,包括集群中index数量、运行状态、当前几圈所在的ip

Lucene

和自甴很熟 提交于 2020-01-31 18:01:59
【承接上文】 1、问:Lucene优点? 答:a、Lucene定义了一套以9字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。 b、在传统倒排索引的基础上,实现了分块索引。 【ps:这里说明一下什么是倒排索引】 实际应用中需要根据属性值来查找记录,这种索引表中的每一项都包括一个属性值和对应的记录地址。由于是由属性值来确定记录位置,因而被称为倒排索引。 c、用户无需编写代码即可使用系统强大的查询能力,默认实现布尔、模糊、分组查询等。 d、虽然Lucene使用Java语言,但是开源之后就有许多大牛使得其能运行在各种各样的平台上。 2、问:能不能别整那些虚头巴脑的,整点代码不香吗? 答:香,好滴。以idea为例。 【未完待续!】 来源: 51CTO 作者: Red_Ant_hoyl 链接: https://blog.51cto.com/13479739/2468698

Elasticsearch系列---shard内部原理

别来无恙 提交于 2020-01-26 12:02:09
概要 本篇我们来看看shard内部的一些操作原理,了解一下人家是怎么玩的。 倒排索引 倒排索引的结构,是非常适合用来做搜索的,Elasticsearch会为索引的每个index为analyzed的字段建立倒排索引。 基本结构 倒排索引包含以下几个部分: 某个关键词的doc list 某个关键词的所有doc的数量IDF(inverse document frequency) 某个关键词在每个doc中出现的次数:TF(term frequency) 某个关键词在这个doc中的次序 每个doc的长度:length norm 某个关键词的所有doc的平均长度 记录这些信息,就是为了方便搜索的效率和_score分值的计算。 不可变性 倒排索引写入磁盘后就是不可变的,这样有几个好处: 不需要锁,如果不更新索引,不用担心锁的问题,可以支持较高的并发能力 如果cache内存足够,不更新索引的话,索引可以一直保存在os cache中,可以提升IO性能。 如果数据不变,filter cache会一直驻留在内存。 索引数据可以压缩,节省cpu和io开销。 doc底层原理 前面提到倒排索引是基于不可变模式设计的,但实际Elasticsearch源源不断地有新数据进来,那光是建立、删除倒排索引,岂不是非常忙? 如果真是不停地建立,删除倒排索引,那ES压力也太大了,肯定不是这么实现的

ElasticSearch 倒排索引简析

大兔子大兔子 提交于 2020-01-20 10:33:35
内容概要 倒排索引是什么?为什么需要倒排索引? 倒排索引是怎么工作的? 1. 倒排索引是什么? 假设有一个交友网站,信息表如下: 美女1:“ 我要找在上海做 PHP 的哥哥。 ” 需要匹配 性别、城市、语言列 。 美女2:“ 我要找北京的爱旅游、爱美食的 JAVA 哥哥。 ” 更复杂了是吧,实际场景中,会有更复杂的排列组合。 对于这类的搜索,关系型数据库的索引就很难应付了,适合使用全文搜索的倒排索引。 倒排索引 是一种数据库的索引形式,存储了 “内容 -> 文档” 映射关系 ,目的是快速的进行全文搜索。 2. 倒排索引是怎么工作的? 主要包括2个过程: 创建倒排索引 倒排索引搜索 2.1 创建倒排索引 举个例子,有2个文档: Document#1 “ Recipe of pasta with sauce pesto ” Document#2 “ Recipe of delicious carbonara pasta ” 先对文档进行分词,形成一个个的 token ,也就是 单词 ,然后保存这些 token 与文档的对应关系。 结果如下: 2.2 倒排索引搜索 搜索示例: 搜索 “ pasta recipe ” 先分词,得到2个 token,( “ pasta ”、“ recipe ” )。 然后去倒排索引中进行匹配。 这2个词在2个文档中都匹配,所以2个文档都会返回,而且分数相同。

es 倒排索引

元气小坏坏 提交于 2020-01-10 07:38:51
https://blog.csdn.net/qq_41864967/article/details/100107808 在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。 例如,文档 1 经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。 那么,倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。 举个栗子,有以下文档: 对文档进行分词之后,得到以下倒排索引。 另外,实用的倒排索引还可以记录更多的信息,比如文档频率信息,表示在文档集合中有多少个文档包含某个单词。 那么,有了倒排索引,搜索引擎可以很方便地响应用户的查询。 比如用户输入查询 Facebook ,搜索系统查找倒排索引,从中读出包含这个单词的文档,这些文档就是提供给用户的搜索结果。 要注意倒排索引的两个重要细节: 倒排索引中的所有词项对应一个或多个文档 倒排索引中的词项根据字典顺序升序排列 来源: CSDN 作者: liuming690452074 链接: https://blog.csdn.net/liuming690452074/article/details/103896516

全文搜索技术——倒排索引介绍

 ̄綄美尐妖づ 提交于 2019-12-18 15:56:21
文章目录 1.简介 2.详细介绍 1.简介 倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。 倒排文件(倒排索引),索引对象是文档或者文档集合中的单词等,用来存储这些单词在一个文档或者一组文档中的存储位置,是对文档或者文档集合的一种最常用的索引机制。 搜索引擎的关键步骤就是建立倒排索引,倒排索引一般表示为一个关键词,然后是它的频度(出现的次数),位置(出现在哪一篇文章或网页中,及有关的日期,作者等信息),它相当于为互联网上几千亿页网页做了一个索引,好比一本书的目录、标签一般。读者想看哪一个主题相关的章节,直接根据目录即可找到相关的页面。不必再从书的第一页到最后一页,一页一页的查找. 2.详细介绍 0)设有两篇文章1和2   文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too.   文章2的内容为:He once lived in Shanghai. 1)由于lucene是基于关键词索引和查询的,首先我们要取得这两篇文章的关键词,通常我们需要如下处理措施   a