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技术,着也是进行数据挖掘的基础。

时间: 2024-10-09 00:08:58

Lucene/Solr学习笔记(一)的相关文章

solr学习笔记section1-在tomcat中部署单(节点)机solr5.5.4

solr自带jetty内嵌容器,但在实际开发工作中,大家喜欢使用tomcat容器,因此这篇笔记主要讲解如何在tomcat中配置和启动solr 注意,由于采用的solr版本是5,容器的servlet版本需要是3.0以上,所以tomcat的选择需要是8.0及以上版本. 在系统中任意位置建立一个solr-home文件夹,用于以后存放solr所有相关的配置及数据,如图,我建立在/home/下 利用wget在该目录下下载好solr安装包和tomcat安装包,并解压到当前文件夹 wget http://ap

Solr学习笔记-认识solr及安装配置

Solr(http://lucene.apache.org/solr),Apache Lucene项目的子项目,是一个基于Lucene的Java搜索引擎服务器. Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语,更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容,通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引. Solr支持从关系数据库和XML文档中提取原始数据

lucene原理学习笔记(一)

最近在学习lucene原理方面的知识,将学习中学到的知识和问题记录下来,今天学习的主要内容就是关于索引方面的内容.我们知道lucene是实现全文检索的工具包,要在工程里面加入搜索的功能还需要基于lucene的api进行开发.那么全文检索的步骤分为哪几步呢.全文检索大体上分为两个步骤,索引的创建和搜索索引.于是乎全文检索就涉及到如下几个问题: 1.如何创建索引.2.如果搜索索引.3.索引里面存储的信息都有什么. 索引里面存储的都有什么信息呢,可以用一下的例子来说明,一个文件包含多个字符,当要查询一

lucene原理学习笔记(二)

上一篇文章介绍了Lucene的索引结果以及建立索引的步骤,这篇文章就介绍一下如何搜索索引. 第一步,用户输入查询语句. 第二步,对查询语句进行词法分析.语法分析以及语言处理. 1.词法分析主要用来识别单词和关键字. 2.语法分析主要根据查询语句的语法规则来形成一棵语法树. 3.语言处理同索引过程中的语言处理几乎一致,比如词根的处理. 第三步,搜索索引,得到符合语法树的文档. 第四步,计算得到的文档和查询之间的相关性,对查询结果进行排序. 如何来计算文档和查询之间的相关性呢?在此做一个假设,我们将

Solr学习笔记(一)

最近准备为一个产品做一个站内的搜索引擎,是一个java产品.由于原来做过Lucene.net,所以自然而然的就想到了使用Lucene.在复习Lucene的过程中发现了Solr这个和Lucene绑定在一起的Apache的子项目,发现这个搜索服务器正是我们想要的.原来我们做Lucene,会把索引和搜索都放在同一个网站下,也就是在网站启动的时候,或定时在网站应用程序中进行Lucene的初始化和索引,并使用Lucene搜索API提供搜索服务.这个过程,应用网站既提供了搜索内容的提供者(从数据库或文件提取

solr学习笔记--dataimport

在solr4.10已经安装完成的情况下,多核的模式下: 1.需要准备的jar包:数据库驱动jar包  mysql-connector-java-5.1.17-bin.jar,solr-dataimporthandler-4.10.0.jar: solrconfig.xml 中引入 <lib dir="F:/SolrHome/multicore/lib" regex=".*\.jar" /> 2.在配置文件F:\SolrHome\multicore\cor

Solr学习笔记 在Tomcat上部署运行Solr

上一篇我们初识了Solr并且学习了Jetty的启动方式,查看了Solr的管理界面,这一篇我们来实现在Tomcat上部署运行Solr. 部署环境: window7 jdk1.6.0_14 Solr-4.7.2 tomcat-6.0.37 Solr的安装配置Solr home ,主要介绍基于JNDI的配置,其它方式可以参考Solr的wiki. 基于JNDI配置 1:首先建立一个Solr的运行目录. C:\solr-tomcat 将解压缩包中的D:\work\work-tools\solr\solr-

solr 学习笔记(一)--搜索引擎简介

一 搜索引擎是什么一套可对大量结构化.半结构化数据.非结构化文本类数据进行实时搜索的专门软件最早应用于信息检索领域,经谷歌.百度等公司推出网页搜索而为大众广知.后又被各大电商网站采用来做网站的商品搜索.现广泛应用于各行业.互联网应用.是大型系统.网站架构师必备技能. 搜索引擎是用来解决什么问题的 专门解决大量结构化.半结构化数据.非结构化文本类数据的实时检索问题. 这种实时搜索数据库做不了. 搜索引擎适合什么场景使用? 大量结构化.半结构化.非结构化文本类数据的实时搜索 信息检索(如电子图书馆.

Solr学习笔记——导入JSON数据

1.导入JSON数据的方式有两种,一种是在web管理界面中导入,另一种是使用curl命令来导入 curl http://localhost:8983/solr/baikeperson/update/json?commit=true --data-binary @/home/XXX/下载/person/test1.json -H 'Content-type:text/json; charset=utf-8' 2.导入的时候注意格式 使用curl可以导入的格式 { "add": { &qu