`
y806839048
  • 浏览: 1120398 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Solr原理

    博客分类:
  • solr
阅读更多

1.倒排索引基本概念

 

总括:

 

倒排索引:

   单词词典+倒排文件

单词词典中:单词就是索引单位,一个单词对应一个索引,在单词词典内每条索引信息记录着单词本身信息和指向的倒排列表指针(自身的倒排列表在倒排文件的位置)

单词词典一般用hashmap的存储或可以快速有序查找的树形结构B+tree,中的节点存范围分捅导航信息,叶子节点才存单词本身和倒排列表位置信息

倒排列表:

   记载这一个单词在哪个文档中出现过,以及出现的位置

倒排文件:

   所有的单词词典对应的倒排列表的集合

 

单词频率:

   倒排文件可以多记录单词在一个文档中出现的频率

 

文档频率:

    单词出现过的文档数量

 

 

 

      文档(Document):一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖更多种形式,比如Word,PDF,html,XML等不同格式的文件都可以称之为文档。再比如一封邮件,一条短信,一条微博也可以称之为文档。在本书后续内容,很多情况下会使用文档来表征文本信息。

       文档集合(Document Collection):由若干文档构成的集合称之为文档集合。比如海量的互联网网页或者说大量的电子邮件都是文档集合的具体例子。

       文档编号(Document ID):在搜索引擎内部,会将文档集合内每个文档赋予一个唯一的内部编号,以此编号来作为这个文档的唯一标识,这样方便内部处理,每个文档的内部编号即称之为“文档编号”,后文有时会用DocID来便捷地代表文档编号。

       单词编号(Word ID):与文档编号类似,搜索引擎内部以唯一的编号来表征某个单词,单词编号可以作为某个单词的唯一表征。

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

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

      倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。

      倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

      关于这些概念之间的关系,通过图3-2可以比较清晰的看出来。

                              图3-2 倒排索引基本概念示意图

2.倒排索引简单实例

      倒排索引从逻辑结构和基本思路上来讲非常简单。下面我们通过具体实例来进行说明,使得读者能够对倒排索引有一个宏观而直接的感受。

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

                                                  图3-3 文档集合

        中文和英文等语言不同,单词之间没有明确分隔符号,所以首先要用分词系统将文档自动切分成单词序列。这样每个文档就转换为由单词序列构成的数据流,为了系统后续处理方便,需要对每个不同的单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词,在如此处理结束后,我们可以得到最简单的倒排索引(参考图3-4)。在图3-4中,“单词ID”一栏记录了每个单词的单词编号,第二栏是对应的单词,第三栏即每个单词对应的倒排列表。比如单词“谷歌”,其单词编号为1,倒排列表为{1,2,3,4,5},说明文档集合中每个文档都包含了这个单词。

                                                     图3-4 简单的倒排索引

       之所以说图3-4所示倒排索引是最简单的,是因为这个索引系统只记载了哪些文档包含某个单词,而事实上,索引系统还可以记录除此之外的更多信息。图3-5是一个相对复杂些的倒排索引,与图3-4的基本索引系统比,在单词对应的倒排列表中不仅记录了文档编号,还记载了单词频率信息(TF),即这个单词在某个文档中的出现次数,之所以要记录这个信息,是因为词频信息在搜索结果排序时,计算查询和文档相似度是很重要的一个计算因子,所以将其记录在倒排列表中,以方便后续排序时进行分值计算。在图3-5的例子里,单词“创始人”的单词编号为7,对应的倒排列表内容为:(3:1),其中的3代表文档编号为3的文档包含这个单词,数字1代表词频信息,即这个单词在3号文档中只出现过1次,其它单词对应的倒排列表所代表含义与此相同。

                                          图3-5 带有单词频率信息的倒排索引

        使用的倒排索引还可以记载更多的信息,图3-6所示索引系统除了记录文档编号和单词频率信息外,额外记载了两类信息,即每个单词对应的“文档频率信息”(对应图3-6的第三栏)以及在倒排列表中记录单词在某个文档出现的位置信息。

                            图3-6 带有单词频率、文档频率和出现位置信息的倒排索引

       “文档频率信息”代表了在文档集合中有多少个文档包含某个单词,之所以要记录这个信息,其原因与单词频率信息一样,这个信息在搜索结果排序计算中是非常重要的一个因子。而单词在某个文档中出现的位置信息并非索引系统一定要记录的,在实际的索引系统里可以包含,也可以选择不包含这个信息,之所以如此,因为这个信息对于搜索系统来说并非必需的,位置信息只有在支持“短语查询”的时候才能够派上用场。

     以单词“拉斯”为例,其单词编号为8,文档频率为2,代表整个文档集合中有两个文档包含这个单词,对应的倒排列表为:{(3;1;<4>),(5;1;<4>)},其含义为在文档3和文档5出现过这个单词,单词频率都为1,单词“拉斯”在两个文档中的出现位置都是4,即文档中第四个单词是“拉斯”。

     图3-6所示倒排索引已经是一个非常完备的索引系统,实际搜索系统的索引结构基本如此,区别无非是采取哪些具体的数据结构来实现上述逻辑结构。

     有了这个索引系统,搜索引擎可以很方便地响应用户的查询,比如用户输入查询词“Facebook”,搜索系统查找倒排索引,从中可以读出包含这个单词的文档,这些文档就是提供给用户的搜索结果,而利用单词频率信息、文档频率信息即可以对这些候选搜索结果进行排序,计算文档和查询的相似性,按照相似性得分由高到低排序输出,此即为搜索系统的部分内部流程,具体实现方案本书第五章会做详细描述。

3.单词词典

       单词词典是倒排索引中非常重要的组成部分,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件中的位置信息。在支持搜索时,根据用户的查询词,去单词词典里查询,就能够获得相应的倒排列表,并以此作为后续排序的基础。
       对于一个规模很大的文档集合来说,可能包含几十万甚至上百万的不同单词,能否快速定位某个单词,这直接影响搜索时的响应速度,所以需要高效的数据结构来对单词词典进行构建和查找,常用的数据结构包括哈希加链表结构和树形词典结构。
3.1   哈希加链表
       图1-7是这种词典结构的示意图。这种词典结构主要由两个部分构成:

        主体部分是哈希表,每个哈希表项保存一个指针,指针指向冲突链表,在冲突链表里,相同哈希值的单词形成链表结构。之所以会有冲突链表,是因为两个不同单词获得相同的哈希值,如果是这样,在哈希方法里被称做是一次冲突,可以将相同哈希值的单词存储在链表里,以供后续查找。

        在建立索引的过程中,词典结构也会相应地被构建出来。比如在解析一个新文档的时候,对于某个在文档中出现的单词T,首先利用哈希函数获得其哈希值,之后根据哈希值对应的哈希表项读取其中保存的指针,就找到了对应的冲突链表。如果冲突链表里已经存在这个单词,说明单词在之前解析的文档里已经出现过。如果在冲突链表里没有发现这个单词,说明该单词是首次碰到,则将其加入冲突链表里。通过这种方式,当文档集合内所有文档解析完毕时,相应的词典结构也就建立起来了。

3.2   树形结构
       B树(或者B+树)是另外一种高效查找结构,图1-8是一个 B树结构示意图。B树与哈希方式查找不同,需要字典项能够按照大小排序(数字或者字符序),而哈希方式则无须数据满足此项要求。
       B树形成了层级查找结构,中间节点用于指出一定顺序范围的词典项目存储在哪个子树中,起到根据词典项比较大小进行导航的作用,最底层的叶子节点存储单词的地址信息,根据这个地址就可以提取出单词字符串。
                  

        在响应用户查询请求时,其过程与建立词典类似,不同点在于即使词典里没出现过某个单词,也不会添加到词典内。以图1-7为例,假设用户输入的查询请求为单词3,对这个单词进行哈希,定位到哈希表内的2号槽,从其保留的指针可以获得冲突链表,依次将单词3和冲突链表内的单词比较,发现单词3在冲突链表内,于是找到这个单词,之后可以读出这个单词对应的倒排列表来进行后续的工作,如果没有找到这个单词,说明文档集合内没有任何文档包含单词,则搜索结果为空。

分享到:
评论

相关推荐

    lucene&solr原理分析

    lucene&solr原理分析,lucene搜索引擎和solr搜索服务器原理分析。

    solr原理分析.xmind

    【图解版】solr原理分析,从全文检索到solr原理分析,并对出现的问题进行分析解答,不可用于商业用途,如有版权问题,请联系删除!

    solr使用和原理

    solr使用和原理 简单明了的介绍了solr的使用和原理,及其部署方式,适合初学者第一次部署

    Solr原理以及基本应用.pptx

    关于solr的一些基础入门,基于solr6.5,了解之后可以基本上架构出属于自己的搜索引擎

    solr搜索入门文档 原理-搭建-使用细节

    一、Solr原理 1. Lucene基础:Solr的核心是Apache Lucene,一个强大的全文检索库。Lucene处理文本,将其分词,并构建索引,使得高效的信息检索成为可能。 2. 文档模型:Solr通过文档模型来存储数据,每个文档由多个...

    大数据Solr架构原理.pdf

    Solr,全称为Apache Solr,是一个开源的全文搜索引擎,基于Java开发,是Apache Lucene项目的一部分。Solr以其高效性、可扩展性和易用性,广泛应用于大数据环境中的搜索和数据分析。它不仅可以处理结构化、半结构化和...

    solr搜索培训

    **Solr 的工作原理** 主要涉及两个关键概念:**结构化数据** 和 **非结构化数据**。 - **结构化数据** 指具有固定格式或有限长度的数据,如数据库表中的数据。 - **非结构化数据** 指那些不固定格式或长度的数据,...

    solr创建索引的原理及解析

    ### Solr创建索引的原理及解析 #### 一、Solr概述与索引机制 Apache Solr是一款基于Lucene的高性能全文检索服务器,广泛应用于网站的搜索功能中。Solr支持分布式部署,并且提供了丰富的API接口,方便与其他系统...

    Solr5.5搜索引擎之分词原理说明.docx

    Solr5.5 搜索引擎之分词原理说明 Solr5.5 搜索引擎之分词原理说明是指 Solr5.5 搜索引擎内部使用的分词原理,旨在帮助开发者自定义自己的分词器时掌握分词的基础知识。 1. 中文分词 中文分词是指将中文汉字序列切...

    solr(solr-9.0.0-src.tgz)源码

    源码分析是深入理解一个软件系统工作原理的重要途径,对于Solr这样的复杂系统尤其如此。这里我们将围绕"solr-9.0.0-src.tgz"这个源码包,详细探讨其主要组成部分、核心功能以及开发过程中的关键知识点。 1. **Solr...

    solr-6.2.0源码

    一、Solr的架构与工作原理 Solr的核心架构包括客户端API、Solr服务器和索引库。客户端通过HTTP或HTTPS与Solr服务器通信,发送请求并接收响应。服务器端则负责解析请求,对索引进行操作,并返回结果。Solr支持多种...

    solr(中文分词器)集群

    Solr(Apache Solr)是基于Java开发的一款全文搜索引擎服务器,它提供了强大的索引和搜索功能,同时也支持...通过深入理解这些组件的工作原理和配置方法,开发者可以构建出强大的搜索系统,满足各种复杂的业务需求。

    最新版windows solr-8.8.2.zip

    Solr是Apache软件基金会的一个开源项目,是一款强大的全文搜索引擎服务器,它提供了分布式、可扩展、高可用性的搜索和分析服务。...同时,理解Solr的工作原理和最佳实践对于充分利用其功能和提高系统性能至关重要。

    ambari离线安装solr所需文件

    总之,离线安装Solr在Ambari中是一项涉及多步操作的任务,需要对Ambari的架构和服务管理有深入理解,同时也需要对Solr的基本工作原理有所了解。通过遵循提供的资源和指南,可以有效地完成这个过程。

    solr-4.10.3.rar

    在深入探讨这个版本之前,让我们先理解一下Solr的基本架构和工作原理。 1. **SolrCloud**:从4.0版本开始,Solr引入了分布式搜索和处理能力,称为SolrCloud。它允许Solr实例在Hadoop的Zookeeper协调下形成集群,...

    solr解压版安装包

    Solr,全称为Apache Solr,是一款开源的企业级全文搜索引擎,由Apache软件基金会...通过解压版安装,开发者可以快速搭建搜索环境,进行测试和开发,进一步深入了解其工作原理和高级特性,以满足复杂的企业级搜索需求。

    solr实现电商自定义打分

    这通常需要对Solr的内部工作原理有深入的理解,但能提供更大的灵活性。在压缩包`solr-custom-score-master`中,可能包含了这样的示例代码,你可以根据实际需求进行研究和应用。 总结来说,通过Solr的函数查询和...

    SOLR的应用教程

    1.3 Solr服务原理 1.3.1 索引 索引是Solr的核心功能,它将数据转化为倒排索引,以快速响应查询请求。索引过程包括分析、存储和建立倒排索引。 1.3.2 搜索 搜索是通过查询解析器和评分函数实现的,查询结果按...

    solr全文检索中需要用到的apache-solr-1.4.1.zip

    Apache Solr 是一个开源的全文检索引擎,由 Apache 软件基金会开发并维护...Solr 1.4.1版本虽然相对较旧,但其基本原理和架构在后续版本中依然保持一致,理解这个版本可以帮助我们更好地理解全文检索和Solr的工作机制。

Global site tag (gtag.js) - Google Analytics