安装

  • 准备如下环境
    • Linux
    • j2sdk 5.0
    • tomcat 5.5
    • solr 1.1
    • lucene 2.1
  • 安装和配置
    • J2sdk 解压,同意许可协议,安装,添加环境变量。
    • tomcat 解压,安装,修改配置文件,我更改了端口为8080
    • solr 解压,假设解开后的目录为$SOLR_SRC,tomcat的工作目录为$TOMCAT_HOME,我们应用的目录为$SOLR_APP
    • lucene 解压,将contrib/analyzers/lucene-analyzers-2.1.0.jar复制到$TOMCAT_HOME/webapps/solr/WEB-INF/lib中,或者使用我已经打好包的solr.war
cp $SOLR_SRC/dist/apache-solr-1.1.0-incubating.war $TOMCAT_HOME/webapps
cp -r $SOLR_SRC/example/solr $SOLR_APP

目录说明

  • install package($SOLR_SRC)
目录名 描述
dist solr应用包,被封装成了jar和war格式,我们用到war,放到tomcat容器中。
docs solr的文档,有html及pdf格式。
example 一个简单的solr配置和应用的例子,可以很方便的通过修改这个例子来实现我们的应用。
lib solr用到的其他java开发包,包括lucene。
src solr的全部源代码
  • webapp($TOMCAT_HOME/webapps/solr)
目录名 描述
admin 管理模块jsp代码
WEB-INF & META-INF 同JSP标准
  • app($SOLR)
目录名 描述
bin replication脚本
conf solr配置文件,solrconfig.xml和schema.xml最重要,前者是solr服务配置,后者是索引定义文件。
data 索引文件存放位置
logs 日志文件

工作原理介绍

  • Solr被部署到一个JSP/Servlet容器中(比如tomcat,还可以使用Resin或者Solr自带的Jetty)
    • Solr提供了三个Servlet来提供基本的服务
      • SolrServer(URL映射为/select/*) 接受并处理所有的查询请求并返回结果
      • SolrUpdate(URL映射为/update/*) 接受并处理所有的索引新建更新以及删除请求,并返回状态。
      • ping(URL映射为/admin/ping) 在分布式体系中用来确认该节点是否工作的接口。
    • 所有的查询、索引更新,通过标准HTTP协议,根据SOLR约定的格式,将请求及数据封装为XML文档,通过POST方式发送给以上a、b接口,来实现搜索的相关功能。

配置文件及配置项

  • 所谓配置文件,是指在$SOLR_APP/conf下的所有文件,这些文件的配置影响我们SOLR应用的行为方式。以下给出我们用到的文件,其他的文件多半是英文词法分析需要用到的文件,暂时忽略。
文件名 说明
admin-extra.html 该文件定义了solr管理模块的头部HTML代码,比如应用名称或者其他功能链接等等。
schema.xml 索引类型及索引定义文件
scripts.conf 用于replication脚本定位solr服务的配置文件,包括solr服务主机名,端口,同步端口,各类目录等。
solrconfig.xml solr服务配置文件,包括索引位置存放目录,性能参数等。
xslt目录 定义了一个xslt样例,用来将solr的查询结果(XML格式)格式化输出

脚本

其它

  • 需要注意的几个问题
    • tomcat的配置
需要配置tomcat,在解析URI的时候按UTF8编码解析。
在Connector配置节点添加属性URIEncoding="UTF-8"
  • 中文分词

根据调研,在百万量级,每条纪录不超过10k的情况下,使用lucene自带的org.apache.lucene.analysis.cjk.CJKAnalyzer作为中文分词Analyzer,效果良好。但是该Analyzer基于2元分词,在数据条目多或者纪录比价大的情况下将会有非常客观的索引膨胀速度,如果有规模更大的应用最好寻求比较好的基于隐马过程字典类的分词Analyzer,有时间可能会关注中科院开源的ICTCLAS。

修改schema.xml,添加字段类型定义
     <fieldtype name="text_china" class="solr.TextField">
        <analyzer class="org.apache.lucene.analysis.cjk.CJKAnalyzer"/>
    </fieldtype>
以上配置字段类型text_china使用lucene的中文分词
然后配置所需要的字段和类型
    <field name="id" type="string" indexed="true" stored="true"/>
   <field name="title" type="text_china" indexed="true" stored="true"/>
   <field name="author" type="text_china" indexed="true" stored="true"/>
   <field name="news_time" type="date" indexed="true" stored="true"/>
   <field name="level" type="string" indexed="true" stored="true"/>
   <field name="url" type="text" indexed="true" stored="true"/>
   <field name="keywords" type="text_china" indexed="true" stored="true"/>
  • 重建索引删除目录的问题

重建索引,需要删除$SOLR_HOME/data(如果你没有更改solrconfig.xml,那么默认是这个位置)下所有目录,我因为删除其index目录里的内容,浪费了数小时深入到UpdateHandler的源码中调试bug,结论只是因为再向上一级目录删除的问题,不过这点solr本身做的也不够好,Stack Trace没有可用的提示信息,当然一定意义上这是java的通病了。。。。。

  • 进阶
    • 中文分词

找了个免费的中文分词,按照lucnen的anaylizer格式编写,挂接可用,但效果一般:org.mira.lucene.analysis.MIK_CAnalyzer

可在http://220.231.29.17:8080/solr/admin/analysis.jsp?name=title&highlight=on&val=&qval=测试他的分词效果

  • RequestHandler
  • WriteHandler
  • replication
  • distribution

例子

测试机 http://220.231.29.17:8080/solr/admin/form.jsp

产品机 http://61.135.182.72:8080/solr/admin/form.jsp 产品机数据每小时与数据库同步一次

接口说明

地址:http://61.135.182.72:8080/solr/select

字符集:UTF-8,用GET方式传入的参数及查询结果均为UTF-8编码,这点一定要留意。

参数名 取值 说明
indet on/off 是否对返回结果缩进,on为缩进,off为不缩进
version 2.2 solr版本号,目前用2.2
q 字符串 查询语句,与lucene语法兼容,具体见之后详述
start 数字 指定从查询结果的第几条开始返回,比如start=10从第10条开始返回,起始数字为0
rows 数字 指定返回多少条记录,比如rows=1000返回1000条记录
fl 字符串 结果包含的字段列表,*为所有,或者按“,”分开,比如title,author
qt 字符串 指定查询所使用的句柄,在solrconfig.xml中定义的RequestHandler,一般用standard
wt 字符串 指定输出结果所用的句柄,在solrconfig.xml中定义的WriteHandler,常用standard是XML格式输出,json是JSON格式输出,还支持python、ruby和xslt输出。
hl.fl 字符串 需要进行关键字高亮显示的字段列表,比如hl.fl=title则对title字段中的关键字高亮显示

查询语句说明

语法 说明
足球 查询默认字段(例子中为title字段)中包含足球关键字的条目
足球;news_time desc 查询默认字段中包含足球关键字的条目,并将结果按照news_time(新闻时间)倒序返回。
足球 篮球;news_time desc 查询默认字段中包含足球或者篮球关键字的条目,并将结果按照news_time倒序返回
足球 AND 篮球;news_time desc 查询默认字段中包含足球并且篮球关键字的条目,并将结果按照news_time倒序返回
author:付强;news_time desc 查询作者(author)字段中匹配付强的条目,并将结果按照news_time倒序返回。
author:付强 AND sect_ids:7321 AND title:足球;news_time desc 查询作者为付强,标题中包含足球的华奥原创新闻

字段列表

字段名 格式 索引 存储 排序 说明 例子
id 数字 Y Y Y 新闻id 1094999
title 字符串 Y Y Y 新闻标题 中国足协室内五人制足球甲级联赛前3站射手榜
author 字符串 Y Y Y 作者 付强
news_time XML标准时间格式 Y Y Y 新闻时间 2007-04-02T17:14:00Z
level 数字 Y Y Y 新闻级别 2
url 字符串 Y Y Y URL http://news.sports.cn/author/2007-04-02/1094999.html
keywords 字符串 Y Y Y 关键字 足协,足球
from_id 数字 Y Y Y 来源id 464
sect_ids 数字 Y Y Y 栏目id 7321

–CopyRight by ShawnWang 2007

search/easy_solr.txt · 最后更改: 2008/10/01 11:51 由 kenvin
到顶部
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 红麦软件 红麦软件