1 概述
Solr 是一个基于 Apache Lucene 之上的搜索服务器,它是一个开源的、基于 Java 的信息检索库。它旨在驱动功能强大的文档检索应用程序 - 无论您需要根据用户的查询将数据服务到何处,Solr 都可以为您服务。Solr与应用程序的集成以为您服务。
下面是一个如何将 Solr 集成到应用程序中的示例
在上述情况下,Solr 与其他服务器应用程序并行运行。例如,在线商店应用程序将提供用户界面、购物车以及为最终用户购买的方式;而库存管理应用程序将允许商店员工编辑产品信息。产品元数据将保存在某种数据库以及 Solr 中。
Solr的官网: http://lucene.apache.org/solr/
2 特点
Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
在Lucene 主要有个算法被为
倒排索引:使用关键字去搜索文档
正排索引:使用文档的Id 去查询文档,对比文档里面有没有该关键字
倒排索引:就是利用一个Map 集合搞定
Map<String,List<ID>> 这个速度快
正排索引:扫描全表,做个匹配而已
3 工作方式
文档通过Http利用XML或者json 加到一个搜索集合中。
查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等
4 SolrCloud与Solr,lucene关系
4.1 solr与luence的关系
以下为solr官方原文
Many people new to Lucene and Solr will ask the obvious question: Should I use Lucene or Solr?
The answer is simple: if you're asking yourself this question, in 99% of situations, what you want to use is Solr.
A simple way to conceptualize the relationship between Solr and Lucene is that of a car and its engine. You can't drive an engine, but you can drive a car. Similarly, Lucene is a programmatic library which you can't use as-is, whereas Solr is a complete application which you can use out-of-box.
翻译为
许多刚接触Lucene和Solr的人会问一个显而易见的问题:我应该使用Lucene还是Solr?
答案很简单:如果你问自己这个问题,在99%的情况下,你想用的是Solr。
概念化Solr和Lucene之间关系的一个简单方法是汽车及其发动机。你不能开发动机,但你可以开汽车。类似地,Lucene是一个程序库,不能按原样使用,而Solr是一个完整的应用程序,可以开箱即用。
网上有这样的比喻:
(1) lucene是数据库的话,solr就是jdbc
(2) lucene是jar,solr就是一个引用这些jar来写的搜索客户端。Solr是一个可以直接用的应用,而lucene只是一些编程用的库。
4.2 Solr与SolrCloud
SolrCloud是Solr4.0版本开发出的具有开创意义的基于Solr和Zookeeper的分布式搜索方案,或者可以说,SolrCloud是Solr的一种部署方式。Solr可以以多种方式部署,例如单机方式,多机Master-Slaver方式,这些方式部署的Solr不具有SolrCloud的特色功能。