目录

安装

cp $SOLR_SRC/dist/apache-solr-1.1.0-incubating.war $TOMCAT_HOME/webapps
cp -r $SOLR_SRC/example/solr $SOLR_APP

目录说明

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

工作原理介绍

配置文件及配置项

文件名 说明
admin-extra.html 该文件定义了solr管理模块的头部HTML代码,比如应用名称或者其他功能链接等等。
schema.xml 索引类型及索引定义文件
scripts.conf 用于replication脚本定位solr服务的配置文件,包括solr服务主机名,端口,同步端口,各类目录等。
solrconfig.xml solr服务配置文件,包括索引位置存放目录,性能参数等。
xslt目录 定义了一个xslt样例,用来将solr的查询结果(XML格式)格式化输出

脚本

其它

需要配置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=测试他的分词效果

例子

测试机 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