OpenCms 集成外部Solr Server

OpenCms默认是以内嵌的Solr作为全文搜索服务的,不过我们也可以配置一个独立的Solr搜索服务器

设置外部Solr Server

1. 从Solr 官方站点http://lucene.apache.org/solr/downloads.html下载solr最新版,目前是4.2.1版本,解开压缩包solr-4.2.1.zip,

解压缩文件至solr-4.2.1目录中

2. 创建一目录取名为SolrHome

3. 将solr-4.2.1.war 从路径solr-4.2.1/dist/ 中复制至SolrHome 中并改名为solr.war (改不改都没关系,主要是方便访问)

4. 创建几个目录

  SolrHome/SolrSearchDemo1

  SolrHome/SolrSearchDemo1\conf

  SolrHome/SolrSearchDemo1\data

5. 将/<Tomcat Server>/webapps/opencms/WEB-INF/solr/conf 目录中所有文件Copy 至SolrHome/SolrSearchDemo1/conf 中

(实际就是把内嵌solr的一些配置复制过来)

6. 更改SolrHome/SolrSearchDemo1/conf/ schema.xml 文件,将 default="NEW" 移除

<field name="id"                  type="uuid"         indexed="true"  stored="true"  default="NEW" />

7. 在SolrHome 中创建solr.xml文件,并填入以下内容

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <solr persistent="false">
 3   <!--
 4   adminPath: RequestHandler path to manage cores.  
 5     If 'null' (or absent), cores will not be manageable via request handler
 6   -->
 7 <cores adminPath="/admin/cores" defaultCoreName="SolrSearchDemo1" host="${host:}" hostPort="${jetty.port:}" hostContext="${hostContext:}" zkClientTimeout="${zkClientTimeout:15000}" shareSchema="true">
 8     <core name="SolrSearchDemo1" instanceDir="SolrSearchDemo1" />
 9   </cores>
10 </solr>

8. 设置Tomcat Server, 在目录/<Tomcat Server Home>/conf/Catalina/localhost/ 目录中创建Solr.xml 并填充以下内容 (<SolrHome> 是指SolrHome文件夹的绝对路径):

<?xml version="1.0" encoding="utf-8"?>

<Context docBase="\\<SolrHome>\\solr.war" debug="0" crossContext="true">

  <Environment name="solr/home" type="java.lang.String" value="<SolrHome>" override="true"/>

</Context>

9. 启动Solr Server

设置OpenCms

1. 从HttpClient 官网http://hc.apache.org/downloads.cgi 载最新版的HttpClient.jar 和HttpCore.jar 将其Copy 至<Tomcat Home>\webapps\opencms\WEB-INF\lib 下,因为OpenCms 会用HttpClient 4.x 访问外部Solr API,但本身却没有自带HttpClient4.x的依赖包,我这里用的是

org.apache.httpcomponents.httpclient_4.2.3.jar
org.apache.httpcomponents.httpcore_4.2.3.jar

2. 修改<Tomcat Home>\\webapps\opencms\WEB-INF\config\ opencms-search.xml 文件将:

<solr enabled="true" >

改为

<solr enabled="true" serverUrl="http://<solr server host>:<port>/solr">,由于我在同一台机器上配置了两台TOMCAT,所以这里配置是serverUrl="http://localhost:8082/solr"

这里要注意的是如何同一台服务器上有两个TOMCAT,最好把配置solr的tomcat中的server.xml的端口数值加2,以防端口冲突

3.启动OpenCMS, 切换为Administration 模式,进入Search Management,创建名为Solr Index Source, 该Source定义了OpenCms中可以被搜索的项目的数据来源,比如产品信息

点击“Assign document types”, 关联文档类型

org.opencms.search.documents.CmsDocumentContainerPage

org.opencms.search.documents.CmsDocumentXmlContent

org.opencms.search.documents.CmsDocumentHtml

如图

点击“Assign resources”绑定数据源,就是项目的信息(依据xsd创建的项目)

4. 创建名为"SolrSearchDemo1"的index并绑定刚刚创建好的Index Source,如图

 绑定成功后打开opencms\WEB-INF\config\opencms-search.xml文件找到SolrSearchDemo1的index,修改index内容为

<index class="org.opencms.search.solr.CmsSolrIndex">
  <name>SolrSearchDemo1</name>
   <rebuild>offline</rebuild>
   <project>Offline</project>
   <locale>all</locale>
   <configuration>solr_fields</configuration>
   <sources>
     <source>ProductSource</source>
   </sources>
   <param name="org.opencms.search.CmsSearchIndex.checkTimeRange">false</param>
   <param name="search.solr.postProcessor">org.opencms.search.solr.CmsSolrLinkProcessor</param>
</index>

5. BuildIndex:Index overview中点击 Rebuild

6. 进入外部Solr 管理员界面:http://<solr server host>:<port>/solr

7. 在管理员界面中查询数据以检查Index 是否成功导入至外部Solr 中,有时开始查不到,重新Rebuild或者重新启动opencms和solr的tomcat再测试才出来,如图

 

感谢我的同事Dawei研究,测试,并提交详细文档

posted on 2013-08-07 09:31  诡计的不老歌  阅读(1162)  评论(0编辑  收藏  举报