OpenCms 集成外部Solr Server

2019-03-27 00:48|来源: 网路

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


转自:http://www.cnblogs.com/liugang/p/3030740

相关问答

更多
  • 对于我的一些网站,我使用了创建“front”模板的方法,该模板基于用户代理决定包含哪个真实模板。 有了这个方法,当然你需要创建两个截然不同的模板,一个用于整个桌面版本,另一个用于移动版本。 当然,你仍然可以在它们之间共享css,图像和JavaScript。 从现在开始从头开始,我会选择适合jthemans的答案,并采用响应式设计。 但是,如果您没有大笔预算,并且需要快速提供解决方案,那么独特模板方法会更快。 无论如何,这里是我提到的简单的“前”模板: <%@ page session="false" %> ...
  • 是的,应该可以使用WSO2 DAS 3.0.1,因为它使用的是solr 5.2.1。 您可以完全按照上面提到的步骤为DAS启用它。 Yes it should be possible to do with WSO2 DAS 3.0.1, as it is using solr 5.2.1. You can exactly follow the steps mentioned in above post to enable it for DAS.
  • 看看错误似乎apache-solr-cell jar及其依赖关系在Solr库的提取lib中缺失。 添加这些文件...... looking at the error it seems apache-solr-cell jar and its dependencies are missing in th ...
  • 对于一般的Solr,你应该参考Solr参考指南寻求帮助。 这是为了即将发布的Solr 5.0版本,但大多数指南仍然与4.0相关,而其他文档(旧wiki)的质量很差。 Solr需要单独安装; 它不仅仅是一个Maven依赖。 要安装Solr,请按照指南中的安装说明进行操作。 为了在你的java层中联系solr,你可以使用solr-j ,你可以添加它作为maven的依赖,如下所述 ,最新版本是4.10.2 : org.apache.solr
  • 几个月前,我遇到了同样的问题。 我想这是你的问题 你必须改变这个
  • 我发现UrlRewriteFilter( http://tuckey.org/urlrewrite/ )非常适合处理并解决了我的问题! I found UrlRewriteFilter (http://tuckey.org/urlrewrite/) to be quite nice to work with and solved my issue!
  • 官方答案是:将其作为独立应用程序运行。 不再支持 从Solr 5.0开始,不再支持在像Tomcat这样的servlet容器中将Solr部署为WAR的支持。 有关如何将Solr安装为独立服务器的信息,请参阅安装Solr 。 关于此举的决定的背景可以在Solr Wiki上找到。 Solr旨在成为服务器而非Java Web应用程序,类似于mysql或Apache Web服务器。 首次创建Solr时,将其设计为Web应用程序是一个方便的选择,以避免编写大量棘手的代码来构建网络层。 如今,这一设计决定已成为限制因素。 ...
  • 好的,所以我最终解决了这个问题。 我还使用了Richard Friedman的标签云中的一些代码。 我这样做的方法如下:在指定的时间间隔内,OpenCMS运行一个读取Lucene索引的预定作业,从“关键字”字段中提取所有术语(可以为VFS中的每个文件填写),生成标签云并将结果存储在我的OpenCMS模板中的文件中。 有两个Java文件:Cloud.java和BuildTagCloud.java。 “Cloud”读取索引并返回最常用术语的列表。 “BuildTagCloud”实现I_CmsScheduledJ ...
  • OpenCms使用资源的locale-property来了解内容应该以哪种语言显示。 要利用这一点,您可以在文件夹/ en /中创建内容(例如/en/page1.html /en/about.html),并将/ en /文件夹的locale-property设置为“en”。 您还应该使用其他语言添加内容。 要完成多语言设置,请将文件夹/ en /复制到/ de / 确保选择“不复制资源,只创建文件夹中所有资源的兄弟姐妹”。 然后将/ de /文件夹的locale-property设置为“de”。 这样,Op ...
  • 我不是OpenCms的专家,但据我所知,您可以像.8sd文件中的v8.Article一样定义自己的结构化内容类型。 在那里,您可以设置可在ADE中编辑的字段。 您的HTML代码可以添加到自定义formatter-jsp中。 希望这个对你有帮助。 OpenCms文档不是很广泛... Alkacon提供支持,但价格非常高...... I am no expert in OpenCms, but as far as I know, you are able to define your own structure ...