Solr是一个基于Lucene java库的企业级搜索服务器,包含XML/HTTP,JSON API,高亮查询结果,缓存,复制,还有一个WEB管理界面。Solr运行在Servlet容器中,其架构以下:java
主要功能包括全文检索,高亮命中,分面搜索(faceted search),近实时索引,动态集群,数据库集成,富文本索引,空间搜索;经过提供分布式索引,复制,负载均衡查询,自动故障转移和恢复,集中配置等功能实现高可用,可伸缩和可容错。web
Solr和Lucene的本质区别有如下三点:搜索服务器、企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专一于搜索底层的建设,而Solr专一于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。因此说Solr是Lucene面向企业搜索应用的扩展。数据库
Solr目前有不少用户了,比较著名的用户有 AOL、 Disney、 Apple等,国内的有淘宝,淘宝的终搜就是基于Solr改造的,终搜用于淘宝的SNS、淘女郎等处的搜索。apache
1. 下载浏览器
官方网址:http://lucene.apache.org/solr/缓存
下载地址:http://archive.apache.org/dist/lucene/solr/tomcat
2. 安装与配置服务器
以solr-4.4.0为例,解压以后的目录以下:架构
➜ solr-4.4.0 tree -L 1 . ├── CHANGES.txt ├── contrib ├── dist ├── docs ├── example ├── licenses ├── LICENSE.txt ├── NOTICE.txt ├── README.txt └── SYSTEM_REQUIREMENTS.txt 5 directories, 5 files
solr提供一个war包能够运行web界面,该文件位于exmaple/webapps目录下,发布该war包以前须要配置solr home,solr home是索引和配置文件所在的目录。app
solr home的设置有好几种方式:
(1)、基于环境变量solr.solr.home
直接修改JAVA全局环境变量
export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/tmp/solrhome"
你也能够修改TOMCAT_HOME/bin/catalina.sh,在文件开头添加:
JAVA_OPTS='-Dsolr.solr.home=/tmp/solrhome'
或者,在启动时进行设置。start.jar在源码包中能够找到,内部包含jetty容器。
$ java -Dsolr.solr.home=/tmp/solrhome -jar start.jar
(2)、基于JNDI配置
修改war中的web.xml文件,取消下面对下面的注视,并修改env-entry-value的值。
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>/tmp/solrhome</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
或者,建立solr.xml文件放于TOMCAT_HOME/conf/Catalina/localhost,内容以下:
<?xml version="1.0" encoding="utf-8"?> <Context docBase="TOMCAT_HOME/webapps/solr.war" debug="0" crossContext="true"> <Environment name="solr/home" type="java.lang.String" value="/tmp/solrhomehome" override="true"/> </Context>
(3)、基于当前路径的方式
这种状况须要在example目录下去启动tomcat,Solr查找./solr,所以在启动时候须要切换到example目录下面
3. 在Jetty上运行Solr
在example目录下,运行下面命令便可启动一个内置的jetty容器:
$ java -Dsolr.solr.home=/tmp/solrhome -jar start.jar
经过http://localhost:8983/solr便可访问。
4. 在tomcat中运行Solr
将example/webapps/solr.war拷贝到tomcat的webapps目录下,而后参照上面的说明设置solr home值。tomcat版本可使用tomcat-6.0.36。
其次,将example/lib/ext目录中的jar包拷贝到tomcat-6.0.36/webapps/solr/WEB-INF/lib目录下。
而后,将example/resources/log4j.properties也拷到classpath,或者在tomcat-6.0.36/webapps/solr/目录下新建了一个classes目录,将log4j.properties放进去。
这时候启动tomcat后访问http://localhost:8080/solr会提示错误,这是由于solr home目录下没有solr的配置文件和一些目录。请将solr-4.4.0/example/solr/目录下的文件拷贝到solr home目录下,例如:
$ cp -r solr-4.4.0/example/solr/ /tmp/solrhome/
最后,启动tomcat,而后经过浏览器访问。
5. 其余
关于中文支持
关于中文,solr内核支持UTF-8编码,因此在tomcat里的server.xml须要进行配置
<Connector port="8080" maxHttpHeaderSize="8192" URIEncoding="UTF-8" />
另外,向solr Post请求的时候须要转为utf-8编码。对solr 返回的查询结果也须要进行一次utf-8的转码。检索数据时对查询的关键字也须要转码,而后用“+”链接。
String[] array = StringUtils.split(query, null, 0); for (String str : array) { result = result + URLEncoder.encode(str, "UTF-8") + "+"; }