Solr简述及倒排索引介绍

我是研究僧i 提交于 2021-02-16 07:41:40

一、Solr简述

1、Solr是什么?

     Solr是一个Java开发的基于Lucene的开源搜索平台,其搜索技术核心是使用倒排索引,即通过关键字映射到对应的文档(value--key),与一般搜索用到的key--value不同。

     Solr内的资源存储是以文档Document为对象进行存储,文档的内容是由多个表示资源属性的Field构成的。Solr是将文档中的Field经过分词后作为索引,用二分法将关键字与排序号的索引进行匹配,进而查找到对应文档,提供高性能的搜索效率。每个文档都通过唯一的id字段来表示该文档。

2、为什么使用Solr?

    由于传统电商多数使用传统搜索,即传统搜索是从静态数据库中筛选出符合条件的结果,这种结果往往是不可变得、静态的。而通常电商系统中需要提供搜索功能,通过任意关键字搜索出匹配的结果。而这些任意的数据不可能是根据数据库的字段查询的,所以需要利用全文搜索工具提前对数据进行分词,然后通过分词的结果,根据分词搜索到对应的文档,向用户反馈搜索结果。而Solr就能通过倒排索引功能,技术,结合IKanalyzer中文分词器实现这样的搜索功能。

3、Solr、elasticsearch与Lucene三者联系与区别

(1)三者介绍

    Lucene是一套信息检索工具包,并不包含搜索引擎系统,它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时仍需要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。

    Solr是一个有HTTP接口的基于Lucene的搜索平台,封装了很多Lucene细节,自己的应用可以直接利用HTTP GET/POST请求去实现搜索,进行维护修改索引。

    Elasticsearch也是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。采用的策略是分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

(2)联系与区别

    三者联系:solr和elasticsearch都是基于Lucene工具包做的一些封装。

    solr和elasticsearch的区别:

  • A. solr利用zookeeper进行分布式管理,而elasticsearch自身带有分布式协调管理功能;
  • B. solr比elasticsearch实现更加全面,solr官方提供的功能更多,而elasticsearch本身更注重于核心功能,高级功能多由第三方插件提供;
  • C. solr在传统的搜索应用中表现好于elasticsearch,而elasticsearch在实时搜索应用方面比solr表现好

二、倒排索引介绍

1、索引(index) 的定义

一个索引文件(index)包含了一连串的文档(Documents),一个文档(document)是由一连串fields(字段)组成,一个fields(字段)可以被分词成由一连串的term(单词/字符串)。

2、倒排索引

索引(index)存储单词(terms)的统计数据,为了使得基于term的检索效率更高。倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。

(1)倒排索引组成:主要由单词词典和倒排文件组成

    a. 单词词典:

        单词词典是由文档集合中出现过的所有单词构成的字符串集合。首先Solr的文档指的是代表以文本形式存在的存储对象,除了网页外,还包含Word,PDF,html,XML等不同格式的文件、甚至邮件,微博等都可以称之为文档。每个文档有自己唯一的文档ID。Solr经过分词器将文档中的Field分词后,将重复的单词去重,这些单词的集合就构成了单词词典。每个单词也有唯一的单词ID。

    b. 倒排文件

        倒排文件是存储倒排列表的物理文件,存储在磁盘中。倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息、出现频率,每条记录称为一个倒排项,多个倒排项构成倒排列表。

(2)倒排索引原理

        首先要用分词系统将文档自动切分成单词序列。这样每个文档就转换为由单词序列构成的数据流,每个不同的单词有唯一的单词编号,同时记录下倒排列表(出现这个单词的文档ID,出单词该ID的文档出现的频率 ,出现的位置(文档第几个单词出现)),记录每个单词对应的“文档频率信息”(在几个文档这中出现过),在如此处理结束后,我们可以得到倒排索引。

        倒排索引存储结构如下图所示。

    总结:倒排索引存储结构一般为:词项的字符串ID+词项的字符串+词项的文档频率+倒排列表(词项的文档ID+记录词项的频率信息+记录词项的位置信息)。倒排索引它记录的是词,和词所存在的文档id以及倒排列表。通过这种索引结构的存储方式,其查询速率可想而知。

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!