首页 > 代码库 > 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索引请求流程:wKiom1P--F7A-_TnAAE7Lmf2wiE045.jpg



       默认配置返回 Solr 的标准 XML 响应。你也可以配置 Solr 的备用响应格式,如jsoncsv格式的文本。

       索引就是接受输入元数据(数据格式在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"

    目录截图:wKiom1P--KeAG_cxAACwtviH72U761.jpgtomcat配置截图:

wKioL1P--gygyVfOAAC-hOxYknM026.jpg

      

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)配置tomcatJNDI环境变量:在 /opt/tomcat-solr/conf/Catalina/localhost中建立solr.xml文件,内容参考本说明附带的solr.xml。如(2)中的目录有变化,也需要相应修改此文件内容

       (4)配置solrhome目录:将solr-4.6.0\example\solr\目录下的所有文件,复制到/opt/solr/home目录中      

       (5)solrwar包中不包含任何日志的jar包,需要自己手动添加。将solr目录下example\lib\ext中的jarcopytomcatlib中。这时候虽然添加jar包,但是没有对应的日志配置,需要将example\resources中的log4j.properties也放到tomcat/lib中。

       solr包解压后的目录结构:

wKiom1P--SGwHEq3AADzRC7ouqo734.jpg

      

在(1)中的tomcat目录:

wKiom1P_BR7zu3AVAADgOVsq_E4338.jpg

在(2)中的solr/home目录:

wKiom1P_BXuh3WvtAADPJKfSE2Y476.jpg

在(3)中的solr.xml截图:

wKioL1P_BwaxDD26AADO7daxiAc241.jpg

    主要将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,打开界面如下:

wKioL1P_B1_j-VnEAAGaaoy9MyE326.jpg

   

  • solr在项目中的简单实践

 

   我的项目主要是采用的ssh框架。使用solr的目的主要是使用它比较高的查询效率,减小查库的压力。下面讲讲如何在ssh中搭建solr服务。

    1.当然是导入包了,截图如下:

wKiom1P_Bm7BMZIWAAGoEWdGxhE695.jpg2.创建service及其实现。

wKiom1P_BprQP8Y2AABnyEs3LDU376.jpg

       1).在接口中声明对索引的处理逻辑,如添加,删除,查询等。

       2).对接口的方法进行实现。

wKioL1P_B_TBIWQnAADO7daxiAc923.jpg

     wKiom1P_BvvCNwpsAAEuqAdLq-o527.jpg  3).在实现类中创建SolrInputDocument,如下:

wKioL1P_CEThaFhiAAPkGE0OBXs469.jpg


 4).实现solr的索引添加,查询,删除等方法。

wKioL1P_CGrTemGzAAGhZY_MaCw530.jpg

wKioL1P_CJzj8-X3AAGjrQq4iMY793.jpg

  最后,释放solr连接:


wKioL1P_CLHw7iu_AAEEI8F6VYU411.jpg 在spring包下创建solr.xml:

wKioL1P_COeRjauXAADENnlhCZw252.jpg 在solr.xml中去创建bean,,放到spring容器:

wKiom1P_B_HiNfJWAAE2KccRkhQ928.jpg


 schema.xml中添加需要的索引名,具体如下:

wKiom1P_CAaAcfU_AAMhPubkdHY098.jpg



创建唯一IDCopyField以及其他配置:

wKioL1P_CTbBx7WnAAJOSD42bnQ033.jpg



配置fieldType:

wKioL1P_CXHQI6P7AAENMZz8IsI456.jpgwKiom1P_CDXx5GJbAAIsfJqrFRA653.jpg

wKiom1P_CHjhjjt9AAGc5NhqCm8547.jpgwKioL1P_CZ_SUj7mAAGH3jrmq9E938.jpgwKiom1P_CGfjjiH2AAISP12s_Y0355.jpg





在solrconfig.xml中配置索引的权重和索引库路径配置:

wKioL1P_CbeQmNBGAABU32Tu29k805.jpg

wKioL1P_ChKCcRFGAACRMX-FhWc853.jpg


配置http request method方式:

wKiom1P_CQ3Ctz4gAACrj0HtKM8226.jpg


 

配置索引的权重:

wKiom1P_CR3gy0SaAAFkzohXOzM684.jpg

其中” programType^2 contentType^1 player^3 area^0.3 age^0.4 “为索引名*数字,solr在对索引进行操作时,会对每一个索引进行赋予一个索引权重分数,你可以在solr Admin网页中查询时候,设置fl=*,score即可查看索引权重分数。

    最后,你的索引库的目录结构应该是这样的:(以我的索引库tvfan为例)

 

 wKiom1P_CTOwShguAAEU5womuf0412.jpg

    tvfan目录结构:


wKioL1P_CliwN2AQAABs306UMWY756.jpg

tvfan/config目录结构:

wKioL1P_CmnCOweBAACR6qhP6qg374.jpg

 

tvfan/data目录结构:

wKioL1P_CnqTNGHgAABlznxzvOw150.jpg

 

 

tvfan/data/index中即是我们的solr索引文件了:

wKioL1P_ComAlIxHAADUly2hb4A457.jpg

tvfan/data/tlog保存我们对索引库操作的日志文件:

wKiom1P_CYOBIsHEAADLNe1DFno634.jpg

 

 

  • solr Admin下进行索引查询

    1.不加任何条件,查询所有:

wKiom1P_CZLCNxu6AAEiia0NXMI951.jpg

2.加入条件查询:

wKioL1P_Cr2hH8TdAAGjyYojVbU827.jpg

其中,服务器解析的查询字符串如下:

[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学习笔记(一)