solr预研

Solr是一个基于Lucene的Java搜索引擎服务器,提供HTTP接口和多种输出格式。本文介绍了Solr的特性、使用方式,包括通过嵌入式Jetty和部署到Tomcat的启动方案,以及配置运行Solr实战,特别提到了配置IKAnalyzer进行中文分词。

一、简介

参考地址

http://lucene.apache.org/solr/

http://martinyuan.iteye.com/blog/441743

http://www.blogjava.net/RongHao/archive/2007/11/06/158621.html

 

Solr是一个基于Lucene的Java搜索引擎服务器,Solr使用Lucene的搜索核心库来做全文检索,它的接口采用HTTP/XML和JSON APIs传输数据,只需简单配置即可使用,不用像lucene那样还有大量的封装接口,实现搜索和索引代码工作量,并且Solr 创建的索引与 Lucene 搜索引擎库完全兼容,即何时替换都可。

特性有以下几点:

Faceted Search:分面搜索,多维度

Text Analysis:文本解析

Highlighting:高亮

多种输出格式:html,xml,json,csv

数据库集成

具体参见solr演示的example,搜索支持多维度多条件的过滤查询

二、solr使用方式

在别的系统中使用solr,可采用的方式:

·        对大数据量的索引工作可采用csv方式处理

直接采用通过http方式调用solr的接口方式,效率较差,采用solr本身对csv 的支持(http://wiki.apache.org/solr/UpdateCSV),将数据导出为csv格式,然后调用solr的csv接口http://ip:port/solr/update/csv

·        更新索引数据

包含新增、更新、删除,都有对应的指令,需先将需要索引查询的数据组装成xml格式,然后使用httpclient 将数据提交到solr 的http接口,具体可参考solrdemo提供的post.jar中的SimplePostToolTool的实现。


三、配置运行solr实战

参考地址http://lucene.apache.org/solr/api-3_6_1/doc-files/tutorial.html

方案1,使用官方提供的嵌入式jetty启动:

1、进入solr/example目录执行

java -jar start.jar

启动嵌入的jetty,端口为8983, 访问管理页面http://localhost:8983/solr/admin/

 

2、indexing data,进入solr/example/exampledocs,run "java -jar post.jar" on some of the XML files in thatdirectory,具体执行下面命令,建立示例的索引数据

java -jar post.jar solr.xml monitor.xml

下面这个是建立所有索引数据啦

java -jar post.jar solr.xml *.xml

3、search data啦



搜索结果文本


4、updatedata

Solr/example/solr/conf下的


如图配置了id为唯一关键字,那如果索引了两条id相同的记录,后者会覆盖前者。

 

5、deleting data,通过类似下面命令删除document

 

java -Ddata=args -Dcommit=no -jar post.jar "<delete><id>SP2514N</id></delete>"

然后要执行下面命令提交一下,否则还是能搜索到,因为index change has not detected by searcher

java -jar post.jar

 

方案2,部署到tomcat下:

1.tomcat6.0.18到位,solr包到位

2.拷贝solr/dist下的war包到tomcat应用部署目录下

3. 在%TOMCAT_HOME%\conf\Catalina\localhost下新建solr.xml,配置如下

<ContextdocBase=”war的目录”>

  <Environment name="solr/home"type="java.lang.String" value="E:\资源\开源项目\lucene\study\apache-solr-3.6.1\example\solr"override="true" />

</Context>

备注:

Value指定了是solr的主目录,使用solr/example下的solr目录,里面主要有conf和data,conf里面存放配置文件,最重要的就是schema.xml和solrconfig.xml,而data存放索引文件。schema.xml主要包括types、fields和其他的一些缺省设置。solrconfig.xml用来配置Solr的一些系统属性,例如与索引和查询处理有关的一些常见的配置选项,以及缓存、扩展等等。

 

docBase中的路径可以是相对路径或绝对路径(docBase中可以指定weapps目录下的应用或war文件的路径,默认去tomcat的webapps下查找,如果是相对路径是相对%TOMCAT_HOME%conf/server.xml.中Host元素中appBase属性指定的路径

Environment元素中name属性是指定JNDI的名称,在这里JNDI为java:comp/solr/home,关于JNDI是J2EE规范,所有J2EE容器都会实现,用于寻找组件用。

 

4.修改tomcat中conf目录下的server.xml文件,在connector 节点中添加 字符编码属性 URIEncoding,如下

<Connectorport="8080" protocol="HTTP/1.1"  connectionTimeout="20000"

URIEncoding="UTF-8" redirectPort="8443"/>

 

5.启动tomcat,在浏览器中输入http://ip:port/solr/admin

如果要检索查询数据,则需先indexing data,solr提供的例子post.jar提交的端口是8983,具体错误如下所示,可以把tomcat应用端口改为8983,然后再indexingdata。



检索成功


配置中文分词组件IKAnalyzer:

1.把IKAnalyzer3.2.8.jar拷贝到solr.war的web-infi/lib目录下

2.IKAnalyzer.cfg.xml和ext_stopword.dic拷贝到solr.war的web-infi/classes目录下,配置扩展字典和扩展停止字典,可选。

3.调整solr主目录conf/schema.xml配置

这里采用IKTokenizerFactory配置,用IKAnalyzer亦可,到了solr4.0版本官方取消了BaseTokenizerFactory,就只能采用IKAnalyzer配置了。


4.启动solr

java -jar start.jar

5.重新post data


6.测试分词效果

打开地址http://localhost:8983/solr/admin/analysis.jsp

根据我之前的schema中text_general的分析器设置,index时采用最细粒度分词方式,query时采用最大词长分词方式。

拿IKAnalyzer官方手册介绍的一个例子来演示:

文本原文1: 
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
最大词长分词结果: 

引用

ikanalyzer| 是 | 一个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级 | 的 | 中文 | 分词 | 工具包
最细粒度分词结果: 

引用

ikanalyzer| 是 | 一个 | 一 | 个 | 开源 | 的 | 基于 |  java  | 语言 | 开发 | 的 | 轻量级 | 量级 | 的 | 中文 | 分词 | 工具包 | 工具

 

我们设置analyzer页面具体参数之后执行analyze,结果如下图所示,完全符合上述的例子,故到此为止solr3.6.1配置IKAnalyzer3.2.8中文分词器成功。


四、后续待补充:

1.solr的schema配置还有待详细了解

官方参考手册http://wiki.apache.org/solr/SchemaXml

这篇中文介绍的不错http://www.blogjava.net/conans/articles/379545.html

2.solr与数据库集成 DataImportHandler

http://hi.baidu.com/chuanliang2007/item/850ab1ebde54ad11585dd885

 

还有一些别的有意思的资料:

Solr使用搜索论坛示例

http://blog.chenlb.com/2009/05/apache-solr-quick-start-and-demo.html

 

solr4智能提示http://www.iteye.com/topic/1126961

solr4打分规则http://www.iteye.com/topic/1126944

 

五、问题和注意点:

1、出于jdk5的考虑只能使用ikanalyzer3.2.8版本,2012版都要求jdk6+,不知该版本是否支持solr3.6.1?

2、ikanalyzer与solr结合使用的两种配置方式,采用IKAnalyzer配置如果设置才能类似iktokenizerFactory那样设置索引采用最细粒度切词方式,查询采用最长词长切词方式

因为solr4.0版本如您手册所说取消了basetokenizerfactory,只能采用ikanalyzer配置,那样是否就达不到我想要的效果了。

 

3. 关于中文,solr内核支持UTF-8编码,所以在tomcat里的server.xml需要进行配置

<Connector port="8080" maxHttpHeaderSize="8192" URIEncoding="UTF-8" …/>

另外,向solr Post请求的时候需要转为utf-8编码。对solr 返回的查询结果也需要进行一次utf-8的转码。检索数据时对查询的关键字也需要转码,然后用“+”连接。

具体参见SimplePostTool


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值