返回 登录
0

Solr概述

阅读511

1.1 Solr 简介
1.1.1 什么是lucene?
lucene是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。

1.1.2 什么是Solr?
Solr是Apache下的一个开源项目,使用Java基于Lucene开发的全文检索服务;是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

1.1.3 为什么选择Solr ?
在大型的SQL数据库上很难执行高速的查询有Solr是Apache 下的一个开源项目,使用Java基于Lucene开发的全文检索服务;
是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
两点原因:第一点原因来自SQL数据库在性能上缺乏亮点。基本上,你需要在你的查询中使用JOIN操作。
第二点原因是文档的天然数据特性:松散的文本文件,这种查询都是需要使用LIKE。然而joins和likes都是性能杀手,在目前的数据库引擎中是不方便的。
所以,很多时候希望找到一种跟SQL完全不同的数据检索方式:倒排索引。这种数据结构类似与美化过的词典:
key是单个的term
values是跟term对应的文档列表
这种数据方式可以帮助在大型的数据库上面进行高速查询。

1.2 Solr 关键特性
1.基于标准的开放接口:Solr搜索服务器支持通过XML、JSON和HTTP查询和获取结果。
2.易管理:Solr可以通过HTML页面管理,Solr配置通过XML完成。
3.可伸缩性:能够有效地复制到另外一个Solr搜索服务器。
4.灵活的插件体系:新功能能够以插件的形式方便的添加到Solr服务器上。
5.强大的数据导入功能:数据库和其他结构化数据源现在都可以导入、映射和转化。

1.3 Solr 核心组成
SolrHome:SolrHome是Solr运行的主目录,该目录可以包含多个solrcore目录。
SolrCore:每个solrcore相互独立,可以单独对外提供搜索和索引服务;Solr实例就是一个solrcore目录,包含运行solr实例的所有配置文件和索引文件

1.4 Solr 倒排索引
正排索引(正向索引):正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。
正排表结构如图1所示,这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。
尽管正排表的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。

倒排索引(反向索引):倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。
由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。 倒排表的结构图如图2:

1.4.1 solr索引创建流程
分词组件Tokenizer
分词组件(Tokenizer)会做以下几件事情(这个过程称为:Tokenize),处理得到的结果是词汇单元(Token)。
1、将文档分成一个一个单独的单词。
2、去除标点符号。
3、去除停词(stop word)。

1.4.2 语言处理组件
语言处理组件(linguistic processor)主要是对得到的词元(Token)做一些语言相关的处理。对于英语,语言处理组件(Linguistic Processor)一般做以下几点:
1、变为小写(Lowercase)
2、将单词缩减为词根形式
3、将单词转换为词根形式

1.4.3 索引组件(Indexer)
1、利用得到的词(Term)创建一个字典
2、对字段进行排序
3、合并相同的词和词出现的文档
1.5 Solr 写数据流程
1、源字符串首先经过分词器处理,包括:拆分词以及去除stopword。
2、然后经过语言处理,包括大小写转换以及单词转换
3、将源数据中需要的信息加入到Document中的各个Field字段中,并把需要索引的Field字段索引起来,同时把需要存储的Field字段存储起来。然后将索引写入存储器,存储器可以是内存或者磁盘。

1.6 Solr 读数据流程
1、用户提供搜索关键词,也就是搜索语句,需要经过分词器处理以及语言处理
2、对处理之后的关键词,搜索索引找出对应Document 即记录
3、用户根据需要从找到的Document中提取需要的Field字段

评论