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研究,测试,并提交详细文档