1、Solr简述html
一、Solr是什么?数据库
Solr是一个Java开发的基于Lucene的开源搜索平台,其搜索技术核心是使用倒排索引,即经过关键字映射到对应的文档(value--key),与通常搜索用到的key--value不一样。elasticsearch
Solr内的资源存储是以文档Document为对象进行存储,文档的内容是由多个表示资源属性的Field构成的。Solr是将文档中的Field通过分词后做为索引,用二分法将关键字与排序号的索引进行匹配,进而查找到对应文档,提供高性能的搜索效率。每一个文档都经过惟一的id字段来表示该文档。分布式
二、为何使用Solr?工具
因为传统电商多数使用传统搜索,即传统搜索是从静态数据库中筛选出符合条件的结果,这种结果每每是不可变得、静态的。而一般电商系统中须要提供搜索功能,经过任意关键字搜索出匹配的结果。而这些任意的数据不多是根据数据库的字段查询的,因此须要利用全文搜索工具提早对数据进行分词,而后经过分词的结果,根据分词搜索到对应的文档,向用户反馈搜索结果。而Solr就能经过倒排索引功能,技术,结合IKanalyzer中文分词器实现这样的搜索功能。性能
三、Solr、elasticsearch与Lucene三者联系与区别搜索引擎
(1)三者介绍spa
Lucene是一套信息检索工具包,并不包含搜索引擎系统,它包含了索引结构、读写索引工具、相关性工具、排序等功能,所以在使用Lucene时仍须要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。插件
Solr是一个有HTTP接口的基于Lucene的搜索平台,封装了不少Lucene细节,本身的应用能够直接利用HTTP GET/POST请求去实现搜索,进行维护修改索引。htm
Elasticsearch也是一个创建在全文搜索引擎 Apache Lucene基础上的搜索引擎。采用的策略是分布式实时文件存储,并将每个字段都编入索引,使其能够被搜索。
(2)联系与区别
三者联系:solr和elasticsearch都是基于Lucene工具包作的一些封装。
solr和elasticsearch的区别:
2、倒排索引介绍
一、索引(index) 的定义
一个索引文件(index)包含了一连串的文档(Documents),一个文档(document)是由一连串fields(字段)组成,一个fields(字段)能够被分词成由一连串的term(单词/字符串)。
二、倒排索引
索引(index)存储单词(terms)的统计数据,为了使得基于term的检索效率更高。倒排索引是实现“单词-文档矩阵”的一种具体存储形式,经过倒排索引,能够根据单词快速获取包含这个单词的文档列表。
(1)倒排索引组成:主要由单词词典和倒排文件组成
a. 单词词典:
单词词典是由文档集合中出现过的全部单词构成的字符串集合。首先Solr的文档指的是表明以文本形式存在的存储对象,除了网页外,还包含Word,PDF,html,XML等不一样格式的文件、甚至邮件,微博等均可以称之为文档。每一个文档有本身惟一的文档ID。Solr通过分词器将文档中的Field分词后,将重复的单词去重,这些单词的集合就构成了单词词典。每一个单词也有惟一的单词ID。
b. 倒排文件
倒排文件是存储倒排列表的物理文件,存储在磁盘中。倒排列表记载了出现过某个单词的全部文档的文档列表及单词在该文档中出现的位置信息、出现频率,每条记录称为一个倒排项,多个倒排项构成倒排列表。
(2)倒排索引原理
首先要用分词系统将文档自动切分红单词序列。这样每一个文档就转换为由单词序列构成的数据流,每一个不一样的单词有惟一的单词编号,同时记录下倒排列表(出现这个单词的文档ID,出单词该ID的文档出现的频率 ,出现的位置(文档第几个单词出现)),记录每一个单词对应的“文档频率信息”(在几个文档这中出现过),在如此处理结束后,咱们能够获得倒排索引。
倒排索引存储结构以下图所示。
总结:倒排索引存储结构通常为:词项的字符串ID+词项的字符串+词项的文档频率+倒排列表(词项的文档ID+记录词项的频率信息+记录词项的位置信息)。倒排索引它记录的是词,和词所存在的文档id以及倒排列表。经过这种索引结构的存储方式,其查询速率可想而知。