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