Solr介绍及安装配置

Solr介绍

Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。

Solr原理

Solr对外提供标准的http接口来实现对数据的索引的增加、删除、修改、查询。在 Solr 中,用户通过向部署在servlet 容器中的 Solr Web 应用程序发送 HTTP 请求来启动索引和搜索。Solr 接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。通过 HTTP 以同样的方式返回响应。默认配置返回Solr 的标准 XML 响应,也可以配置Solr 的备用响应格式。

可以向 Solr 索引 servlet 传递四个不同的索引请求: add/update 允许向 Solr 添加文档或更新文档。直到提交后才能搜索到这些添加和更新。 commit 告诉 Solr,应该使上次提交以来所做的所有更改都可以搜索到。 optimize 重构 Lucene 的文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。 delete 可以通过 id 或查询来指定。按 id 删除将删除具有指定 id 的文档;按查询删除将删除查询返回的所有文档。

中文分词库

1、IK Analyzer

它是一款结合了词典和文法分析算法的中文分词组件,基于字符串匹配,支持用户词典扩展定义,支持细粒度和智能切分

2、mmseg4j

它用Chih-Hao Tsai 的MMSeg算法实现的中文分词器,并实现lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。 MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex加了四个规则过虑

3、庖丁解牛

庖丁解牛作为solr(Lucene)缺省的中文分词方案,它叫做PaodingAnalyzer,这个analyer的核心任务就是生成一个可以切词TokenStream

安装和部署

下载

官网地址:http://lucene.apache.org/solr

安装与配置

以solr-5.2.1为例,解压之后的目录如下:

➜  solr-5.2.1  ls
CHANGES.txt        NOTICE.txt         contrib            example
LICENSE.txt        README.txt         dist               licenses
LUCENE_CHANGES.txt bin                docs               server

contrib有一些功能模块是需要的jar包

dist是打包发布好的工程war包

docs是帮助文档

example是示例,里面有打包部署好的solr工程示例和servlet容器jetty。如果你没有tomcat可以直接使用Jetty服务器部署你的solr示例。

solr提供一个war包可以运行web界面,该文件位于exmaple/webapps目录下,发布该war包之前需要配置solr home,solr home是索引和配置文件所在的目录。

配置solr home的集中方式

  • 1、基于环境变量solr.solr.home 直接修改Java全局变量环境

    export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/tmp/solrhome"
    
  • 2、基于JNDI配置 修改war中的web.xml文件

    <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目录下面

在tomcat中运行solr

将example/webapps/solr.war拷贝到tomcat的webapps目录下,然后参照上面的说明设置solr home值。tomcat版本可以使用tomcat-7.0.12。

其次,将example/lib/ext目录中的jar包拷贝到tomcat-7.0.12/webapps/solr/WEB-INF/lib目录下。

然后,将example/resources/log4j.properties也拷到classpath,或者在tomcat-7.0.12/webapps/solr/目录下新建了一个classes目录,将log4j.properties放进去。

这时候启动tomcat后访问http://localhost:8080/solr会提示错误,这是因为solr home目录下没有solr的配置文件和一些目录。请将solr-5.2.1/example/solr/目录下的文件拷贝到solr home目录下,例如:

$ cp -r solr-4.4.0/example/solr/ /tmp/solrhome/

最后启动tomcat,输入 http://localhost:8080/solr/admin/出现管理页面

在Jetty上运行Solr

在example目录下,运行下面命令即可启动一个内置的jetty容器:

$ java -Dsolr.solr.home=/tmp/solrhome -jar start.jar

通过http://localhost:8002/solr即可访问。

关于中文支持

关于中文,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") + "+";
}
----EOF-----

Categories: search-engine Tags: search-engine