企业级搜索引擎Solr使用入门指南

由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择:

  • 基于Lucene自己进行封装实现站内搜索。

工作量及扩展性都较大,不采用。

  • 调用Google、Baidu的API实现站内搜索

同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用。

  • 基于Compass+Lucene实现站内搜索

适合于对数据库驱动的应用数据进行索引,尤其是替代传统的like ‘%expression%’来实现对varchar或clob等字段的索引,对于实现站内搜索是一种值得采纳的方案。但在分布式处理、接口封装上尚需要自己进行一定程度的封装,暂时不采用。

  • 基于Solr实现站内搜索

封装及扩展性较好,提供了较为完备的解决方案,因此在门户社区中采用此方案,后期加入Compass方案。

1、 Solr简介

Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对 Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用 Solr 创建的索引。

2、 Tomcat下Solr安装配置

由于Solr基于java开发,因此Solr在windows及Linux都能较好部署使用,但由于Solr提供了一些用于测试及管理、维护较为方便的shell脚本,因此在生产部署时候建议安装在Linux上,测试时候可以在windows使用。

下面以Linux下安装配置Solr进行说明,windows与此类似。

wget http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.zip

unzip apache-tomcat-6.0.16.zip

mv apache-tomcat-6.0.16 /opt/tomcat

chmod 755 /opt/tomcat/bin/*

wget http://apache.mirror.phpchina.com/lucene/solr/1.2/apache-solr-1.2.0.tgz

tar zxvf apache-solr-1.2.0.tgz

Solr的安装配置最为麻烦的是对solr.solr.home的理解和配置,主要有三种

  • 基于当前路径的方式

cp apache-solr-1.2.0/dist/apache-solr-1.2.0.war /opt/tomcat/webapps/solr.war

mkdir /opt/solr-tomcat

cp -r apache-solr-1.2.0/example/solr/ /opt/solr-tomcat/

cd /opt/solr-tomcat

/opt/tomcat/bin/startup.sh

由于在此种情况下(没有设定solr.solr.home环境变量或JNDI的情况下),Solr查找./solr,因此在启动时候需要切换到/opt/solr-tomcat

  • 基于环境变量solr.solr.home

在当前用户的环境变量中(.bash_profile)或在/opt/tomcat/catalina.sh中添加如下环境变量

export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/opt/solr-tomcat/solr"

  • 基于JNDI配置

mkdir –p /opt/tomcat/conf/Catalina/localhost

touch /opt/tomcat/conf/Catalina/localhost/solr.xml ,内容如下:

      <Context docBase="/opt/tomcat/webapps/solr.war" debug="0" crossContext="true" >
                 <Environment name="solr/home" type="java.lang.String" value="/opt/solr-tomcat/solr" override="true" />
    </Context>

访问solr管理界面

3、 Solr原理

    Solr对外提供标准的http接口来实现对数据的索引的增加、删除、修改、查询。在 Solr 中,用户通过向部署在servlet 容器中的 Solr Web 应用程序发送 HTTP 请求来启动索引和搜索。Solr 接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。通过 HTTP 以同样的方式返回响应。默认配置返回 Solr 的标准 XML 响应,也可以配置 Solr 的备用响应格式。

可以向 Solr 索引 servlet 传递四个不同的索引请求:

  • add/update 允许向 Solr 添加文档或更新文档。直到提交后才能搜索到这些添加和更新。
  • commit 告诉 Solr,应该使上次提交以来所做的所有更改都可以搜索到。
  • optimize 重构 Lucene 的文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。
  • delete 可以通过 id 或查询来指定。按 id 删除将删除具有指定 id 的文档;按查询删除将删除查询返回的所有文档。

一个典型的Add请求报文

<add>

<doc>

<field name="id">TWINX2048-3200PRO</field>

<field name="name">CORSAIR  XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail</field>

<field name="manu">Corsair Microsystems Inc.</field>

<field name="cat">electronics</field>

<field name="cat">memory</field>

<field name="features">CAS latency 2, 2-3-3-6 timing, 2.75v, unbuffered, heat-spreader</field>

<field name="price">185</field>

<field name="popularity">5</field>

<field name="inStock">true</field>

</doc>

<doc>

<field name="id">VS1GB400C3</field>

<field name="name">CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail</field>

<field name="manu">Corsair Microsystems Inc.</field>

<field name="cat">electronics</field>

<field name="cat">memory</field>

<field name="price">74.99</field>

<field name="popularity">7</field>

<field name="inStock">true</field>

</doc>

</add>

一个典型的搜索结果报文:

<response>

<lst name="responseHeader">

<int name="status">0</int>

<int name="QTime">6</int>

<lst name="params">

<str name="rows">10</str>

<str name="start">0</str>

<str name="fl">*,score</str>

<str name="hl">true</str>

<str name="q">content:"faceted browsing"</str>

</lst>

</lst>

<result name="response" numFound="1" start="0" maxScore="1.058217">

<doc>

<float name="score">1.058217</float>

<arr name="all">

<str>http://localhost/myBlog/solr-rocks-again.html</str>

<str>Solr is Great</str>

<str>solr,lucene,enterprise,search,greatness</str>

<str>Solr has some really great features, like faceted browsing

and replication</str>

</arr>

<arr name="content">

<str>Solr has some really great features, like faceted browsing

and replication</str>

</arr>

<date name="creationDate">2007-01-07T05:04:00.000Z</date>

<arr name="keywords">

<str>solr,lucene,enterprise,search,greatness</str>

</arr>

<int name="rating">8</int>

<str name="title">Solr is Great</str>

<str name="url">http://localhost/myBlog/solr-rocks-again.html</str>

</doc>

</result>

<lst name="highlighting">

<lst name="http://localhost/myBlog/solr-rocks-again.html">

<arr name="content">

<str>Solr has some really great features, like <em>faceted</em>

<em>browsing</em> and replication</str>

</arr>

</lst>

</lst>

</response>

关于solr的详细使用说明,请参考

http://wiki.apache.org/solr/FrontPage

4、 Solr测试使用

Solr的安装包包含了相关的测试样例,路径在apache-solr-1.2.0/example/exampledocs

  • 使用shell脚本(curl)测试Solr的操作:

cd apache-solr-1.2.0/example/exampledocs

vi post.sh,根据tomcat的ip、port修改URL变量的值URL=http://localhost:8080/solr/update

./post.sh *.xml                 # 
  • 使用Solr的java 包测试Solr的操作:

查看帮助:java -jar post.jar –help

提交测试数据:

java -Durl=http://localhost:8080/solr/update -Ddata=files -jar post.jar  *.xml

 

下面以增加索引字段liangchuan、url为例,说明一下Solr中索引命令的使用

1) 修改solr的schema,配置需要索引字段的说明:

vi /opt/solr-tomcat/solr/conf/schema.xml ,在<fields>中增加如下内容

<field name="liangchuan"  type="string" indexed="true" stored="true"/>

<field name="url"  type="string" indexed="true" stored="true"/>

2) 创建增加索引请求的xml测试文件

touch /root/apache-solr-1.2.0/example/exampledocs/liangchuan.xml,内容如下:

<add>

<doc>

<field name="id">liangchuan000</field>

<field name="name">Solr, the Enterprise Search Server</field>

<field name="manu">Apache Software Foundation</field>

<field name="liangchuan">liangchuan‘s solr "hello,world" test</field>

<field name="url">http://www.google.com</field>

</doc>

</add>

3) 提交索引请求

cd apache-solr-1.2.0/example/exampledocs

    ./post.sh liangchuan.xml
    

4) 查询

通过solr的管理员界面http://localhost:8080/solr/admin查询

或通过curl 测试:

       export URL="http://localhost:8080/solr/select/"
       curl "$URL?indent=on&q=liangchuan&fl=*,score"
 

5、Solr查询条件参数说明

 
参数 描述 示例
q Solr 中用来搜索的查询。可以通过追加一个分号和已索引且未进行断词的字段的名称来包含排序信息。默认的排序是 score desc,指按记分降序排序。
q=myField:Java AND otherField:developerWorks; date asc
此查询搜索指定的两个字段并根据一个日期字段对结果进行排序。

start 将初始偏移量指定到结果集中。可用于对结果进行分页。默认值为 0。
start=15
返回从第 15 个结果开始的结果。

rows 返回文档的最大数目。默认值为 10。 rows=25
fq
提供一个可选的筛选器查询。查询结果被限制为仅搜索筛选器查询返回的结果。筛选过的查询由 Solr 进行缓存。它们对提高复杂查询的速度非常有用。

任何可以用 q 参数传递的有效查询,排序信息除外。
hl 当 hl=true 时,在查询响应中醒目显示片段。默认为 false。参看醒目显示参数上的 Solr Wiki 部分可以查看更多选项 hl=true
fl 作为逗号分隔的列表指定文档结果中应返回的 Field 集。默认为 “*”,指所有的字段。“score” 指还应返回记分。
*,score

   其中关于Solr查询相关的参数详细的信息请参看:
   http://wiki.apache.org/solr/CommonQueryParameters

Solr的查询条件参数q的格式与Lucene相同,具体参看:

http://lucene.apache.org/java/docs/queryparsersyntax.html

6、 在门户社区中solr使用模式

在门户社区中需要使用solr,可采用如下模式:

  • 对原有系统已有的数据或需要索引的数据量较大的情况

直接采用通过http方式调用solr的接口方式,效率较差,采用solr本身对csv 的支持(http://wiki.apache.org/solr/UpdateCSV

),将数据导出为csv格式,然后调用solr的csv接口http://localhost:8080/solr/update/csv
  • 对系统新增的数据

先将需要索引查询的数据组装成xml格式,然后使用httpclient 将数据提交到solr 的http接口,例如

http://localhost:8080/solr/update

   也可以参考post.jar中的SimplePostTool的实现。
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/util/SimplePostTool.java?view=co
  • 中文分词

采用庖丁解牛作为solr(Lucene)缺省的中文分词方案

项目库:http://code.google.com/p/paoding/

Google groups:http://groups.google.com/group/paoding

Javaeye的groups:http://analysis.group.javaeye.com/

  • 与nutch的集成使用

http://blog.foofactory.fi/2007/02/online-indexing-integrating-nutch-with.html

  • 嵌入式Solr

http://wiki.apache.org/solr/Solrj#EmbeddedSolrServer

  • 分布式索引

http://wiki.apache.org/solr/CollectionDistribution

7、参考资料

http://wiki.apache.org/solr/

http://www.ibm.com/developerworks/cn/java/j-solr1/

http://www.ibm.com/developerworks/cn/java/j-solr2/

http://www.xml.com/pub/a/2006/08/09/solr-indexing-xml-with-lucene-andrest.html?page=1

http://lucene.apache.org/java/docs/queryparsersyntax.html

http://www.blogjava.net/RongHao/archive/2007/11/06/158621.html

时间: 2024-11-02 16:32:27

企业级搜索引擎Solr使用入门指南的相关文章

Solr使用入门指南

本文转自http://chuanliang2007.spaces.live.com/blog/cns!E5B7AB2851A4C9D2!499.entry?wa=wsignin1.0 由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择: 1. 基于Lucene自己进行封装实现站内搜索.工作量及扩展性都较大,不采用. 2. 调用Google.Baidu的API实现站内搜索.同第三方搜索引擎绑定太死,无法满足后期业

[转载] Solr使用入门指南

转载自http://blog.csdn.net/liuzhenwen/article/details/4060922 由于搜索引擎功能在门户社区中对提高用户体验有着重要的作用,在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有几种方案可供选择: 1. 基于Lucene自己进行封装实现站内搜索.工作量及扩展性都较大,不采用. 2. 调用Google.Baidu的API实现站内搜索.同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用. 3. 基于Compass+Lu

Solr使用入门指南 (四)

solr软件介绍 在这出现了一个软件就是Solr的软件,下面就和大家一起来看看这个软件怎么用 上图为安装solr环境的软件的左面截图,首先来看看这幅图的讲解: 1.Dashboard:就是上面全图就是这个按钮的功能: 2.Logging:查看日志: 3.CoreAdmin:添加core用户,这个可重要也可不重要,默认是collection1,这个就是添加一个和collection1具有一样功能的用户,用来检索和查询.点击之 后会出现下面的截图: 补充: name:给core随便起个名字: ins

编程入门指南

前言 如今编程成为了一个越来越重要的「技能」:作为设计师,懂一些编程可能会帮你更好地理解自己的工作内容:作为创业者,技术创始人的身份则会让你的很多工作显得更容易.而作为刚想入门的新手,面对眼前海量的信息,或许根本不知道从哪里开始:入门轻松度过初级材料的学习后,发现学习越来越困难,陡峭的学习曲线又让你望而却步:你知道如何在页面上打印输出一些文本行,但是你不知道何时该进行一个真正的有用的项目:你不清楚自己还有哪些不知道的东西,你甚至搞不清下一步该学什么. 这篇文章的内容对此不仅会有一些方向性的建议,

HTML5新手入门指南

HTML5的发展越来越迈向成熟,很多的应用已经逐渐出现在你我日常生活中了,不只让传统网站上的互动Flash逐渐的被HTML5的技术取代,更重要的是可以透过HTML5的技术来开发跨平台的手机软件,让许多开发者感到十分兴奋! 当你开始想要学习.试图想要投入相关的开发时,由于HTML5的技术还在持续发展.进化当中,学习的资源也都比较零散,较难有一个整体的方向.在本篇文章中,笔者将会介绍HTML5的主要技术组成,并且提供一些学习资源让大家参考. HTML5到底是什么? 一般广义而言的HTML5则包含了H

CTF入门指南

转自http://www.cnblogs.com/christychang/p/6032532.html ctf入门指南 如何入门?如何组队? capture the flag 夺旗比赛 类型: Web密码学pwn 程序的逻辑分析,漏洞利用windows.linux.小型机等misc 杂项,隐写,数据还原,脑洞.社会工程.与信息安全相关的大数据reverse 逆向windows.linux类ppc 编程类的 国内外著名比赛 国外:国内:xctf联赛 0ctf上海国内外都有,很强 入门需要哪些基础

Docker入门指南

地址:docker入门指南 更换国内镜像源 docker store地址默认是在国外,下载速度很慢,自行更换国内docker加速地址. 名词解释 image: 镜像containers: 容器docker-machine: docker虚拟主机docker store: docker存储云 术语 Image 和 ContainerImage可以理解为一个系统镜像,Container是Image在运行时的一个状态.如果拿虚拟机作一个比喻的话,Image就是关机状态下的磁盘文件,Container就

搜索引擎 solr

1.创建索引 举例子: 文档一:solr是基于Lucene开发的企业级搜索引擎技术 文档二:Solr是一个独立的企业级搜索应用服务器,Solr是一个高性能,基于Lucene的全文搜索服务器 首先经过分词器分词,solr会为分词后的结果(词典)创建索引,然后将索引和文档id列表对应起来,如下图所示: 比如:solr在文档1和文档2中都有出现,所以对应的文档ID列表中既包含文档1的ID也包含文档2的ID,文档ID列表对应到具体的文档,并体现该词典在该文档中出现的频次,频次越多说明权重越大,权重越大搜

Quartz.NET简介及入门指南

Quartz.NET简介 Quartz.NET是一个功能完备的开源调度系统,从最小的应用到大规模的企业系统皆可适用. Quartz.NET是一个纯净的用C#语言编写的.NET类库,是对非常流行的JAVA开源调度框架 Quartz 的移植. 入门指南 本入门指南包括以下内容: 下载 Quartz.NET 安装 Quartz.NET 根据你的特定项目配置 Quartz 启动一个样例程序 下载和安装 你可以下载 zip 文件或使用 Nuget 程序包.Nuget 程序包只包含 Quartz.NET 运