usic AS下如何正确设置solr

2019-03-27 01:22|来源: 网路

Apache Solr是一个基于Apache Lucene的企业级开源全文检索服务器,它支持层面搜索、命中醒目显示和多种输出格式。

Solr需要运行在一个servlet 容器里(因此目前几乎所有常见的Servlet容器都可以满足Solr的运行需要)。solr在lucene的上层提供了一个基于HTTP/XML的Web Services,应用需要通过这个服务与solr进行交互。

关于Solr的详细介绍,此处就不再赘述。关键是这么好的东西,网上相关的资料主要是关于如何使用,关于如何安装,由于各方面原因,只是在tomcat下如何配置相对较多,但是像AAS这样标准的JavaEE容器来说,tomcat下某些可以运行的东西,可能并不能正常运行。毕竟tomcat不是JavaEE容器,并且tomcat对JSR规范的追随与验证没有那么严格。(但是tomcat轻量并且免费,这就导致很多应用系统在开发时运行在tomcat下正常的代码迁移到Weblogic、WebShpere、Apusic等标准的JavaEE容器下之后,总是会抛出一些异常的原因)

Solr需要运行,必须在AS下指定Solr home,对于如何指定,网上介绍的总体来说有4种:

1. 设置java 的系统参数solr.solr.home

 如 -Dsolr.solr.home=E:\app\solr

2. 设置JNDI lookup "java:comp/env/solr/home"

3. 默认为./solr目录,即当前工作路径下的solr

由于工作路径容易造成问题,因此一般不推荐这种方式。

4.在包含 solr 目录的目录中启动 servlet 容器。(默认的 Solr 主目录是当前工作目录下的solr。)

如果开发时在tomcat下直接配置了

在tomcat里配置java:comp/env/solr/home的一个JNDI指向solr的主目录(example目录下),建立/tomcat55/conf/Catalina/localhost/solr.xml文件。文件内容如下:

<Context docBase="E:/app/solr.war" debug="0" crossContext="true" >

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

</Context>

如果按照类似的方法在AAS下配置此文件,solr则会由于找不到指定的配置文件而无法正常启动,这是由于solr寻址的方式造成的。如果按照上述配置,solr会将上下文定位至AAS启动路径而不是应用存在的路径。解决此问题,只需要使用新的配置方式:

打开Solr应用下的web.xml文件,在文件中加入以下内容:

<env-entry>
	<env-entry-name>solr/home</env-entry-name>
	<env-entry-value>E:/app/solr/solr</env-entry-value>
	<env-entry-type>java.lang.String</env-entry-type>
</env-entry>

重新启动AAS,OK!




原文链接: http://blog.csdn.net/cyq1984/article/details/6664456
转自:http://my.oschina.net/chen106106/blog/48302

相关问答

更多
  • 您可以使用两端打开的范围查询。 喜欢: theField:[* TO *] You can use a Range Query with both ends open. like: theField:[* TO *]
  • 问题与以下事实有关:在单个tomcat上有两个不同的solr部署,其中一个知道solr.home ,另一个不知道。 如果日志中有一行说: org.apache.solr.core.SolrResourceLoader – Using JNDI solr.home: /opt/solr/webapps/solr1 那么它实际上意味着一些 solr实例找到了solr.home参数。 但是如果有多个部署(例如,用于分片测试),并且每个部署设置solr.home ,而不是服务器范围(例如-Dsolr.solr. ...
  • 如果仅查询Solr是有意义的,那就这样做。 如果查询Solr某些数据是有意义的,那就这样做吧。 这取决于您的使用案例,但如果可以使用Solr中的数据回答任何查询,那么将它用于所有内容就完全没问题了。 这可能会更有效地使用您的缓存。 不,不是我所知道的。 不是真的。 Solr不太适合嵌套的JSON(即使你有父/子文档,它也是你必须在每种情况下手动处理的东西,并且需要特殊的套管)。 在这些情况下,您可以使用Solr进行查询,返回ID,然后从mongo中检索实际文档,其JSON结构完好无损。 在这种情况下,您可以 ...
  • 要确保在Azure VM上访问端点,您应该: 在Azure门户中添加端点( 链接 ) 在VM上配置Windows防火墙( 链接 ) 这两个步骤应足以访问Azure VM上的SOLR。 请检查是否已将8983端口的端点添加到VM。 To ensure access to the endpoint on Azure VM you should: Add endpoint in Azure Portal (link) Configure Windows Firewall on VM (link) These tw ...
  • 我做了这个工作。 在打开tomcat的访问日志后,我能够看到发出的请求 http://mydomain.com/solrsearch在哪里使用IP 0:0:0:0:0:0:0:1 所以我将server.xml规则更改为 现在一切正常! 我的Jquery实时搜索能够进行查询,但是无法从外部世界访问从另一个URL(例如管理界面或更新UR ...
  • 我添加了sunspot.yml的路径 development: solr: hostname: localhost port: 8982 log_level: INFO path: /solr/development test: solr: hostname: localhost port: 8981 log_level: WARNING path: /solr/test 不确定这是否足够好。 似乎这是因为我使用的是Solr 4,配 ...
  • 您还需要设置要突出显示结果的字段: http://localhost:8080/solr/select?q=book&hl=true&hl.fl=content 你也可以在你的部分设置它。 编辑:您还需要在solrconfig.xml文件中的中启用突出显示组件。 假设您正在使用标准/选择请求处理程序。 为此,您需要取消注释并修改部分底部的
    我认为你挑战的是,当你启动Solr时,你将它作为一个控制台进程启动,而不是作为一个守护进程。 因此,当您注销时,它会杀死Java进程! 有很多方法可以解决这个问题,从使用像“screen”这样的工具来保存正在运行的控制台进程,使用nohup或java -jar start.jar等命令将这些进程发送到后台。 但是,您真正需要做的是在您的VPS上安装Tomcat或Jetty作为守护程序服务。 您可以让您的VPS托管服务提供商为您执行此操作。 至于你的硬件设置,我认为除非你有一个巨大的索引,或者真正繁忙的网站, ...
  • facet.query :可以多次指定此参数,以指示应将多个查询用作单独的构面约束。 所以你可以做distance:[* TO 5] , distance:[5 TO 10]你会得到个人计数。 然后是facet.date和facet.range ,它可能更适合你。 facet.query: This parameter can be specified multiple times to indicate that multiple queries should be used as separate fa ...
  • 这个问题的答案实际上是基于意见的。 没有一种解决方案在任何情况下都是理想的。 甚至还有关于https://sitecorechat.slack.com的讨论。 首先,您需要考虑是否要重用站点之间的任何内容。 如果是,那么您可以使用Sitecore开箱即用的索引。 你不会从单独的索引中获得那么多。 当然,您可以创建单独的索引,但必须多次抓取某些内容。 如果要创建单独的索引: 保留sitecore_core_index , sitecore_master_index和sitecore_web_index ,它们 ...