首页 > 代码库 > Lucene/Solr学习笔记(一)
Lucene/Solr学习笔记(一)
solr简介
Solr是一个开源的,企业级搜索服务器。Solr可以理解为Lucene的服务器化产品。它使用java编写,遵循http协议和xml协议,使用多种数据格式(如json,xml)传递数据。
但她不是对Lucene的一次简单封装,Solr的大多数特征都与Lucene不同。Solr 和 Lucene 的界限经常是模糊的。以下是Solr的主要特性:
通过HTTP请求来 建立索引和搜索索引
拥有数个缓存 来 加快搜索速度
一个基于web的管理员控制台
运行时做性能统计,包括缓存 命中/错过率
查询表单 来 搜索索引。
以柱状图形式 展示 频繁被查询的关键字
详细的“得分计算和文本解析”分析。
用XML文件的方式 配置搜索计划和服务器
通过配置XML 来添加和配置 Lucene的文本分析库
引入“搜索字段类型”的概念(这个非常重要,然而在Lucne中没有)。
类型用作表示日期和一些特殊的排序问题。
对最终用户和应用成素,disjunction-max 查询处理器比Lucene基础查询器更实用。
查询结果的分类
拼写检查用于寻找搜索关键字 的类似词,优化查询建议
“更类似于”插件用以列出 于查询结果类似的 备选结果。
Solr支持分布式来应对较大规模的部署。
solr技术与数据库技术比较
solr可以理解为一个只有一张简单表格的数据库(这点与lucene相同),没有任何的关系查询(即JIONS),因为记住索引只是为了去支持搜索,而不是去标识一条数据。所以数据库可以去遵守“第三范式”,而索引就不会如此,表格中尽可能多的包含回被搜索到的数据而已,用来补充单表的是,一个域(列)可以有多值。
solr索引操作
solr索引请求流程:
默认配置返回 Solr 的标准 XML 响应。你也可以配置 Solr 的备用响应格式,如json、csv格式的文本。
索引就是接受输入元数据(数据格式在schema.xml中进行配置)并将它们传递给 Solr,从而在 HTTP Post XML 消息中进行索引的过程。你可以向 Solr 索引 servlet 传递四个不同的索引请求:
add/update 允许您向 Solr 添加文档或更新文档。直到提交后才能搜索到 这些添加和更新。
commit 告诉 Solr,应该使上次提交以来所做的所有更改都可以搜索 到。
optimize 重构 Lucene 的文件以改进搜索性能。索引完成后执行一下优 化 通常比较好。如果更新比较频繁,则应该在使用率较低 的时候安排优化。一个索引无需优化也可以正常地运行。优 化是一个耗时较多的过程。
delete 可以通过 id 或查询来指定。按 id 删除将删除具有指定 id 的文档;按查询删除将删除查询返回的所有文档。
Lucene中操作索引也有这几个步骤,但是没有更新。Lucene更新是先删除,然后添加索引。因为更新索引在一定情况下,效率没有先删除后添加的效率好。
四、 solr应用服务安装与配置
需要的安装文件;
1. apache-tomcat-7.0.47.tar.gz
2. solr 4.6.0 (下载地址:http://mirrors.cnnic.cn/apache/lucene/solr/4.6.0/)
安装过程说明:
1.在opt目录下安装tomcat
tomcat所在目录为/opt/tomcat-solr
将tomcat的http端口修改为12080 ,并增加编码配置项:URIEncoding="UTF-8"
目录截图:tomcat配置截图:
2.安装solr
(1)将solr-4.6.0\dist\目录下的solr-4.6.0.war 复制到tomcat目录:/opt/tomcat-solr/webapps/,并重命名为solr.war
(2)在/opt目录下建立solr的主目录/opt/solr/home
(3)配置tomcat的JNDI环境变量:在 /opt/tomcat-solr/conf/Catalina/localhost中建立solr.xml文件,内容参考本说明附带的solr.xml。如(2)中的目录有变化,也需要相应修改此文件内容
(4)配置solr的home目录:将solr-4.6.0\example\solr\目录下的所有文件,复制到/opt/solr/home目录中
(5)solr的war包中不包含任何日志的jar包,需要自己手动添加。将solr目录下example\lib\ext中的jar包copy到tomcat的lib中。这时候虽然添加jar包,但是没有对应的日志配置,需要将example\resources中的log4j.properties也放到tomcat/lib中。
solr包解压后的目录结构:
在(1)中的tomcat目录:
在(2)中的solr/home目录:
在(3)中的solr.xml截图:
主要将value标签下的值修改为你的home所在的路径,其他不用修改。
3.测试solr是否正常运行
启动tomcat, 检查tomcat的日志是否有异常输出 tail -n 300 -f /opt/tomcat-solr/logs/catalina.out
访问 localhost:12080/solr/ ,验证solr的管理界面是否正常启动
4.安装 ik-analyzer 中文分词包
(1)把IKAnalyzer2012FF_u1.jar复制到 /opt/tomcat-solr/webapps/solr/WEB-INF/lib 目录下
(2)在/opt/tomcat-solr/webapps/solr/WEB-INF/目录下创建classes文件夹,并把IKAnalyzer目录下classes目录中的IKAnalyzer.cfg.xml和stopword.dic复制到新创建的classes目录中。
5.安装 mmseg4j 中文分词包
(1)把mmseg4j目录下的3个jar文件,复制到/opt/tomcat-solr/webapps/solr/WEB-INF/lib 目录下
(2)把目录下的mmseg_dic目录,完整复制到 /opt/solr/mmseg_dic目录下
6.安装 jcseg 中文分词包
(1)将jcseg-1.9.1 中的jar文件,复制到/opt/tomcat-solr/webapps/solr/WEB-INF/lib目录下
(2)将jcseg-dict-all中的simplified复制到/opt/solr/jcseg-dict-all/simplified目录下
(3)将jcseg-1.9.1中的 jcseg.properties 中的词库配置项设置为lexicon.path=/opt/solr/jcseg-dict-all/simplified,
再将 jcseg.properties 复制到/opt/tomcat-solr/webapps/solr/WEB-INF/lib目录下
7.安装tvfan配置文件(tvfan是一个已经生成的索引库文件)
将本说明附带的tvfan配置目录,复制到/opt/solr/home目录中。如果5.2步中,配置的词库目录不同,则需要修改schema.xml中的相应配置
8. 重启tomcat,检查是否存在异常
9. 部署solrweb工程服务并产生索引数据
10.提交测试数据
复制 solr-4.6.0\example\exampledocs\下的post.jar到 /opt/solr 目录
将“测试数据”目录下的几个json文件,复制到/opt/solr/test目录
在/opt/solr工作目录下,执行以下命令,将json文件提交至solr
java-Durl=http://localhost:12080/solr/tvfan/update -Dtype=application/json-jar post.jar /opt/solr/test/program00.json
注意:
1. mmseg4j在solr4.5.1中可以正常运行,在solr4.6.0中有异常
至此,solr安装完成。当你的solr应用服务器启动的时候,你可以在浏览器输入"http://localhost:12080/solr/ "打开solrAdmin,打开界面如下:
solr在项目中的简单实践
我的项目主要是采用的ssh框架。使用solr的目的主要是使用它比较高的查询效率,减小查库的压力。下面讲讲如何在ssh中搭建solr服务。
1.当然是导入包了,截图如下:
2.创建service及其实现。
1).在接口中声明对索引的处理逻辑,如添加,删除,查询等。
2).对接口的方法进行实现。
3).在实现类中创建SolrInputDocument,如下:
4).实现solr的索引添加,查询,删除等方法。
最后,释放solr连接:
在spring包下创建solr.xml:
在solr.xml中去创建bean,,放到spring容器:
在schema.xml中添加需要的索引名,具体如下:
创建唯一ID和CopyField以及其他配置:
配置fieldType:
在solrconfig.xml中配置索引的权重和索引库路径配置:
配置http request method方式:
配置索引的权重:
其中” programType^2 contentType^1 player^3 area^0.3 age^0.4 “为索引名*数字,solr在对索引进行操作时,会对每一个索引进行赋予一个索引权重分数,你可以在solr Admin网页中查询时候,设置fl=*,score即可查看索引权重分数。
最后,你的索引库的目录结构应该是这样的:(以我的索引库tvfan为例)
tvfan目录结构:
tvfan/config目录结构:
tvfan/data目录结构:
tvfan/data/index中即是我们的solr索引文件了:
tvfan/data/tlog保存我们对索引库操作的日志文件:
solr Admin下进行索引查询
1.不加任何条件,查询所有:
2.加入条件查询:
其中,服务器解析的查询字符串如下:
[tvfan] webapp=/solr path=/selectparams={fl=*,score&indent=true&q=contentType:微古装+and+programType:16&_=1409216505213&wt=json&fq=subType:2000}hits=2 status=0 QTime=350
总结
通过实际项目进行solr实践,可以更快,更深入的学习与理解solr技术,着也是进行数据挖掘的基础。
本文出自 “Bai_菜” 博客,请务必保留此出处http://3068896.blog.51cto.com/3058896/1546265
Lucene/Solr学习笔记(一)