由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择:
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 ,内容如下:
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>
<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请求报文
Xml代码
- <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>
<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>
一个典型的搜索结果报文:
Xml代码
- <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>
<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>中增加如下内容
Xml代码
- <field name="liangchuan" type="string" indexed="true" stored="true"/>
- <field name="url" type="string" indexed="true" stored="true"/>
<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,内容如下:
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>
<add>
<doc>
<field name="id">liangchuan000</field>
<field name="name">Solr, the Enterprise Search Server</field>
<field name="man
分享到:
相关推荐
而Solr则是一个完整的搜索引擎服务,它可以独立运行,适合构建企业级搜索解决方案,特别适用于快速搭建站内搜索功能。Solr提供了更多高级特性,如多核心(Core)管理、数据导入处理、丰富的查询语法等。 【Solr下载...
### 开源企业搜索引擎SOLR的应用教程:详细解析与实践指南 #### SOLR:企业级搜索引擎的优选 在探讨开源企业搜索引擎SOLR的应用之前,我们先了解SOLR的基本概念及其在企业搜索领域的独特优势。 **SOLR**,全称**...
Solr是一种基于Lucene的开源全文搜索引擎,广泛应用于企业级搜索解决方案中。以下将围绕该书可能涉及的重要知识点进行详细的阐述: ### Solr简介 Solr是Apache软件基金会旗下的顶级项目之一,它提供了一个高性能、...
Solr是一个独立的基于全文检索的企业级搜索应用服务器,它支持通过HTTP利用XML将文档加载到搜索集合中,用户可以通过HttpGet操作发送查找请求,并得到搜索的返回结果。在Java后台开发中,Solr通过SolrJ客户端库与...
在Java Web开发中,Solr通常与其他技术框架如SpringMVC和Spring结合使用,构建强大的企业级搜索解决方案。Shiro作为安全框架,也常常被集成到这类系统中,确保数据的安全访问。通过阅读《Solr权威指南-下卷》,...
"企业级搜索引擎Solr使用入门指南.mht"可能是一个全面的入门指南,适合初次接触Solr的企业级开发者,涵盖了从安装到实际应用的各种基础知识。 "solr性能调优.mht"文件专门针对Solr的性能优化,包括索引优化、硬件...
Solr是一个基于Apache Lucene的开源搜索引擎,广泛应用于企业级搜索应用程序。Solr 6.0手册是一份详细介绍如何使用Solr的文档,它包括PDF格式的指南、目录,并且具备实用性。手册主要针对那些想要学习或部署Solr的...
Solr,全称为Apache Solr,是一款开源的企业级全文搜索引擎,由Java编写并运行在Jetty服务器上。它提供了一个高效、可扩展的平台,用于处理、索引和搜索大量结构化和非结构化数据。Solr是基于Lucene库构建的,因此它...
与此相比,Solr旨在打造企业级搜索引擎系统,可以独立运行,并能通过快速构建企业的搜索引擎,高效地完成站内搜索功能。 Solr安装配置相对直接,可以从其官方网站下载特定版本(如Solr4.10.3),并根据运行环境...
它支持分布式搜索,并提供了丰富的功能集来满足企业级搜索需求。 - **版本说明**:本手册针对的是 Solr 3.* 版本,该版本在当时是较为成熟且广泛应用的一个版本,包含了多项重要的改进和新特性。 - **核心特点**: ...
**Solr** 是一个基于 **Lucene Java库** 的企业级搜索服务器。它具备一套完整的API接口,这些接口主要以Web服务的形式呈现,比如XML/HTTP 和 JSON API等。Solr支持高亮查询结果、片段式搜索(faceted search)、缓存...
**Solr** 是一个高性能、基于Lucene的全文搜索引擎,被广泛应用于企业级搜索应用之中。本指南旨在通过一个示例模式(schema)以及样本数据来介绍Solr的基本操作。 #### 二、环境需求(Requirements) 1. **Java 1.5 ...
Solr以其高效、可扩展和易管理的特性,在企业级搜索应用中广泛应用。它基于Lucene库,提供了丰富的功能,包括Schema设计、查询机制、缓存策略、复制与分布式架构等。 在特性方面,Solr不仅利用了Lucene的强大搜索...
Solr,全称为Apache Solr,是一款开源的企业级搜索引擎,基于Java开发,广泛应用于网站、电商、企业内部数据检索等多种场景。本指南将详细介绍如何进行Solr的单机部署和集群部署,帮助你轻松构建Solr环境。 ### 1. ...
文档的【描述】部分反复强调“solr 使用官方指南”,这意味着文档是权威的、官方认可的学习材料,包含了使用 Solr 进行搜索引擎搭建、部署、管理等操作的官方指导和最佳实践。 【标签】为 "solr",直接反映了文档...
Solr是一款高效、可扩展的企业级全文搜索引擎,广泛应用于网站内容搜索、电子商务商品检索、文档检索系统等领域。它基于Java,采用Lucene库作为其核心搜索引擎,并提供了丰富的特性和强大的管理界面,使得配置和维护...
Apache Solr是一款开源的企业级搜索平台,基于Java语言开发,广泛应用于网站全文检索、内容分析和数据挖掘等领域。以下将对Solr 4.10的主要知识点进行详解: 1. **Solr概述** - Solr的核心功能包括全文检索、拼写...
Solr是中国Apache软件基金会开发的...总之,Solr 8.0.0是一个强大的搜索和分析引擎,适用于各种规模的项目,从简单的网站搜索到企业级的数据仓库解决方案。了解和掌握Solr的使用,将极大地提升你的数据检索和分析能力。
Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要用来处理全文搜索和企业级搜索。它基于Java,构建在Lucene搜索引擎库之上,提供了更高级别的API和服务,便于开发人员集成到自己的应用中。Solr ...