`
Clayz
  • 浏览: 298507 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

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

阅读更多

本文转自 http://chuanliang2007.spaces.live.com/blog/cns!E5B7AB2851A4C9D2!499.entry?wa=wsignin1.0

 

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

1. 基于Lucene自己进行封装实现站内搜索。工作量及扩展性都较大,不采用。

2. 调用Google、Baidu的API实现站内搜索。同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用。

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

4. 基于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管理界面 http://ip:port/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

1. 使用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                 #

2. 使用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.iteye.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

分享到:
评论
6 楼 80后的童年2 2018-01-16  
企业级分布式搜索平台Solr视频教程
网盘地址:https://pan.baidu.com/s/1gg2xcPH 密码: bmu5


快速上手数据挖掘之Solr5搜索引擎高级教程
网盘地址:https://pan.baidu.com/s/1kXiSxvD 密码: 3va7


基于Lucene4.6+Solr4.6+Heritrix1.14+S2SH实战开发从无到有垂直搜索引擎
网盘地址:https://pan.baidu.com/s/1jJDMp3S 密码: v3j2

solrcloud5+zookeeper视频教程
网盘地址:https://pan.baidu.com/s/1qZXmQr6 密码: cb2q
5 楼 Clayz 2009-08-08  
kanful 写道
请问一下楼主,
1、solr创建索引之前,所有数据文件,还有数据库的数据,都要先转成xml文件吗。那跟直接创建成索引文件有什么区别呢。为什么中间我要用xml呢。
2、solr不提供其它文件的解析吗。如pdf,word.
3、solr结果显示页面没有demo吗。要自己开发吗。
4、要做一个内部网络的全文检索,用什么好呢。数据主要是各种格式的文件,和数据库里的数据。以后可能要加上一起网站。用solr合适吗。

1,solr选择用xml我想主要是因为它的设计目标是基于http的吧,不知道它现在支不支持json。你给它一个xml,它自动帮你索引,避免了你直接调用lucene api。也许很多人就想要个第三方工具直接用,而不想去自己写索引代码呢。
2,solr的文件解析我不清楚,也没用过。有次和一个用solr的team聊过,他们说他们支持各种文件类型的解析,但是我不知道他们是用的solr,还是其他的第三方工具包。其实pdf,word解析很简单的,pdfbox,poi,自己写个类就搞定了。
3,我记得是没有demo的。我也不清楚你这个demo是怎么定义的。难道你想把solr的搜索结果直接放到你的页面上?我想我们用它的主要目的只是为了获取数据吧。
4,老实说,我不清楚solr在处理海量数据上性能如何,这个需要专门测试下。但是我曾经看到过对lucene的评价,一个不错的玩具...所以在性能和并发要求上,是需要根据项目好好考虑的。

我没用solr做过项目,只是看过官方文档和一点点源码,所以很多问题我也没办法给出答案。
4 楼 kanful 2009-08-07  
请问一下楼主,
1、solr创建索引之前,所有数据文件,还有数据库的数据,都要先转成xml文件吗。那跟直接创建成索引文件有什么区别呢。为什么中间我要用xml呢。
2、solr不提供其它文件的解析吗。如pdf,word.
3、solr结果显示页面没有demo吗。要自己开发吗。
4、要做一个内部网络的全文检索,用什么好呢。数据主要是各种格式的文件,和数据库里的数据。以后可能要加上一起网站。用solr合适吗。
3 楼 yxbbing 2008-12-18  
solr查询分页咱解决呀!好想不太好实现吧
2 楼 Clayz 2008-10-26  
不好意思,我对中文分词没有研究太多,因为项目中没有用到中文。
不能回答你的问题,实在抱歉。
1 楼 niule 2008-10-26  
你好,我是按照步骤来部署的,也是用的jeasy的分词
在analyze里已经可以分词了,但是在query的时候,还是没有分词,

比如索引里有“中文分词终于”这句,我查询“中文终于”的时候,在query中是没有分词成“中文”和“终于”,得不到结果
请问是哪里没有配置正确呢,谢了

相关推荐

    solr资料以及问题汇总

    "企业级搜索引擎Solr使用入门指南.mht"可能是一个全面的入门指南,适合初次接触Solr的企业级开发者,涵盖了从安装到实际应用的各种基础知识。 "solr性能调优.mht"文件专门针对Solr的性能优化,包括索引优化、硬件...

    solr_开发入门例子

    Solr是Apache软件基金会的一个开源项目,是一款强大的全文搜索引擎,常用于构建企业级搜索应用。本文将基于"solr_开发入门例子"这一主题,详细解释Solr的基础知识,包括其核心概念、安装配置、索引创建与查询,以及...

    Solr开发指南.pdf

    而Solr则是一个完整的搜索引擎服务,它可以独立运行,适合构建企业级搜索解决方案,特别适用于快速搭建站内搜索功能。Solr提供了更多高级特性,如多核心(Core)管理、数据导入处理、丰富的查询语法等。 【Solr下载...

    solr入门指南

    ### Solr入门指南知识点解析 #### 一、概述(Overview) **Solr** 是一个高性能、基于Lucene的全文搜索引擎,被广泛应用于企业级搜索应用之中。本指南旨在通过一个示例模式(schema)以及样本数据来介绍Solr的基本...

    solr的搭建入门

    Apache Solr是一款开源的企业级搜索平台,由Apache软件基金会开发,它提供了全文检索、命中高亮、拼写检查、Faceted Search(分面搜索)等多种功能,广泛应用于网站内容搜索、电商商品检索等领域。本文将详细介绍...

    solr7官方文档

    文档的【描述】部分反复强调“solr 使用官方指南”,这意味着文档是权威的、官方认可的学习材料,包含了使用 Solr 进行搜索引擎搭建、部署、管理等操作的官方指导和最佳实践。 【标签】为 "solr",直接反映了文档...

    solr-7.7.3.zip

    Apache Solr是一个开源的企业级搜索平台,源自Lucene项目,由Apache软件基金会维护。Solr以其高效、可扩展性以及高度定制化而闻名,广泛应用于网站全文搜索、企业内部信息检索、电商产品搜索等多个领域。这次我们...

    solr技术总结

    相比于直接使用Lucene或其他第三方搜索引擎接口,Solr提供了更多实用的功能和便利的开发接口,极大地简化了企业级搜索系统的搭建过程。无论是对于开发人员还是运维人员而言,掌握Solr的相关技术和应用都将是一项非常...

    apache-solr-ref-guide-5.2.pdf

    Solr易于安装和配置,并且由于其强大的功能,被广泛用于企业级搜索应用。 ### 知识点一:Apache Solr 5.2 用户指南手册 这份用户指南手册是为初学者和经验丰富的开发人员准备的,旨在通过逐步引导的方式让用户深入...

    solr软件包扩展词典可停词配置学习和开发文档

    通过深入学习Solr的文档和实践经验,开发者可以进一步优化搜索性能,满足复杂的企业级搜索需求。在实际项目中,结合具体业务场景,灵活运用Solr的各种功能,将能为企业带来显著的搜索体验提升。

    apache solr Reference guide 4.5.pdf

    它是一个高性能的企业级搜索引擎,专为全文搜索和搜索应用程序而设计。Solr提供了可扩展、容错和分布式的特点,同时提供了多种接口,包括REST API,使其可以与各种编程语言轻松集成。 文档标题中的"Reference guide...

    solr4.1 reference guide

    Solr非常流行,常被用于构建企业级搜索引擎和大数据查询解决方案。 solr4.1参考指南是一份详细的手册,涵盖了Solr 4.1版本的所有功能和特性。这份参考手册帮助用户理解和掌握Solr的安装、配置、管理和使用等各个...

    lucene入门指南

    **Lucene 入门指南** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它是 Java 开发人员用来构建搜索引擎应用程序的基础工具。本指南将帮助初学者理解 Lucene 的核心概念,以及如何利用它来...

    Lucene入门指南

    - **Solr**:Solr 是一个基于 Lucene 的 Java 库构建的企业级搜索服务器。它在 Lucene 的基础上进行了扩展,提供了更多高级特性,如高可用性、分布式索引和支持多种数据源等。 - **Nutch**:Nutch 是一个基于 Web 的...

    Manning Taming Text How to Find, Organize, and Manipulate It. Jan.2013.pdf

    - Solr:基于Lucene构建,是Apache提供的一个企业级的开源搜索平台,它支持分布式索引、复制和负载平衡等高级功能。Solr常用于网站搜索、企业应用搜索和互联网搜索引擎。 - 搜索技术:文档将涵盖与搜索技术相关的...

    Lucene资料大全(包括Lucene_in_Action书等)

    8. **扩展性**:Lucene可以与其他技术结合,如Solr和Elasticsearch,提供更高级的企业级搜索解决方案。 9. **性能优化**:包括内存管理、磁盘I/O优化、并行处理等策略,以提高搜索性能。 **《Lucene_in_Action》...

    Lucene初级教程.doc

    标题为“Lucene初级教程.doc”,我们可以推断这是一份关于Lucene的入门级文档,Lucene是Apache软件基金会的一个开放源代码项目,它是一个全文搜索引擎库,广泛应用于Java开发中,用于实现高效、可扩展的信息检索服务...

    Big Data Made Easy

    本章重点介绍了网络爬虫工具Nutch和全文搜索引擎Solr的工作原理和实际应用。通过示例展示了如何利用Nutch抓取网页数据,并将这些数据索引化后使用Solr进行高效检索,这对于构建基于网络的数据采集系统具有重要意义...

Global site tag (gtag.js) - Google Analytics