设为首页 收藏本站
查看: 651|回复: 0

[经验分享] 企业级搜索引擎Solr使用指南

[复制链接]

尚未签到

发表于 2016-12-15 09:34:41 | 显示全部楼层 |阅读模式
由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择:

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314579-1-1.html 上篇帖子: Apache Solr 实践(一)solr在Tomcat中部署部署及中文分词配置 下篇帖子: 利用solr构建企业搜索平台(四)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表