Solr

  • Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。官网地址:http://lucene.apache.org/solr/

Solr原理

  • Solr是基于Lucene开发的全文检索服务器,而Lucene就是一套实现了全文检索的api,其本质就是一个全文检索的过程。全文检索就是把原始文档根据一定的规则拆分成若干个关键词,然后根据关键词创建索引,当查询时先查询索引找到对应的关键词,并根据关键词找到对应的文档,也就是查询结果,最终把查询结果展示给用户的过程

Solrd倒排索引

  • 我们传统的方式(正排索引)是从关键点出发,然后再通过关键点找到关键点代表的信息中能够满足搜索条件的特定信息,既通过KEY寻找VALUE。
  • 而Solr的搜索则是采用了倒排索引的方式,即通过VALUE找KEY。而在中文全文搜索中VALUE就是我们要搜索的单词,存放所有单词的地方叫词典。KEY是文档标号列表(通过文档标号列表我们可以找到出现过要搜索单词VALUE的文档)

Solr基于什么

  • 基于lucene搜索库的一个搜索引擎框架,lucene是一个开放源码的全文检索引擎工具包

solr如何实现搜索的

  • 倒排索引,先抽取文档中词,并建立词与文档id的映射关系,然后查询的时候会根据词去查询文档id,并查询出文档

Solr过滤器

  • Solr的过滤器对接收到的标记流(TokenStream )做额外的处理
  • 过滤查询,在查询时设置

solr怎么设置搜索结果排名靠前

  • 设置文档中域的boost值,值越高相关性越高,排名就靠前

IK分词器原理

  • 本质上是词典分词,在内存中初始化一个词典,然后在分词过程中逐个读取字符,和字典中的字符相匹配,把文档中的所有词语拆分出来的过程

solr的索引查询为什么比数据库要快

  • Solr使用的是Lucene API实现的全文检索。全文检索本质上是查询的索引。而数据库中并不是所有的字段都建立的索引,更何况如果使用like查询时很大的可能是不使用索引,所以使用solr查询时要比查数据库快

solr 实现全文检索

  • 索引流程:客户端—》solr 服务器(发送post请求,xml文档包含filed,solr实现对索引的维护)

  • 搜索流程:客户端—》solr 服务器(发送get 请求,服务器返回一个xml 文档)


solr和lucene的区别

Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。

  • 1、搜索服务器:Lucene本质上是搜索库,不是独立的应用程序,而Solr是。

  • 2、企业级:Lucene专注于搜索底层的建设,而Solr专注于企业应用。

  • 3、管理:Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括Solr: Solr是Lucene面向企业搜索应用的扩展

  • Lucene: 是一个索引与搜索类库,而不是完整的程序。

  • Solr:是一个高性能,采用Java5开发,基于Lucene的一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。


Elasticsearch 与 Solr 的比较:

共同点:

  • Solr和Elasticsearch都是基于Lucene实现的;

不同点:

  • 1.Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;

  • 2.Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;

  • 3.Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;

  • 4.Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。