Solr4:索引的复制

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

1. 需求

用一台创建索引的主服务器,不停的查询数据,解析数据,然后提交索引;这样导致主服务器的CPU、内存、硬盘IO占用都很高,如果再用它去做查询的话,用户多时肯定影响效率。

所以用到了Solr的索引复制功能。就是利用复制的索引去满足查询需求。如果查询用户非常多,那么建立更多的复制即可以满足需求。

同时顺便把用户自定义词典也复制过去,这样只需要在主服务器维护词典,它会自动同步到各从服务器,从而保持创建索引与查询时中文分词的一致性。

2. 环境

硬件:linux服务器两台,IP分别为:192.168.2.91/192.168.2.92

软件:Solr 4.1,Tomcat 7

模块:两种中文分词器,自己的web查询项目,一个创建索引的后台程序。

3. 实现

假设已经构建好两台服务器,配置好Tomcat与Solr及中文分词。具体参考前面的文章。

我这里的Solr用到多核(Multi Core),配置了两个core,一个是news用于处理新闻信息;一个是wb,用于处理微博信息。它们的数据结构是不一样的。这两个core都配置了复制,这样索引的提交接口应该是:http://192.168.2.91/solr/newshttp://192.168.2.91/solr/wb;而索引的查询接口则是:http://192.168.2.92/solr/newshttp://192.168.2.92/solr/wb

1). 创建索引的后台程序运行于主服务器192.168.2.91,向索引的提交接口提交数据。

2). 自己的web查询项目布署于192.168.2.92(当然192.168.2.91你也可以布署一下),向索引的查询接口查询数据。

Solr主服务器192.168.2.91,$SOLR_HOME/news/conf/solrconfig.xml中相关配置如下: 

  <requestHandler name="/replication" class="solr.ReplicationHandler" >
    <!-- To enable simple master/slave replication, uncomment one of the sections below, depending on wether this solr instance should be the "master" or a "slave". If this instance is a "slave" you will also need to fill in the masterUrl to point to a real machine. -->
    <lst name="master">
      <!--何时合并,分别有:optimize(合并索引),commit(提交), startup(启动),可以填多个-->
      <str name="replicateAfter">startup</str>
      <str name="replicateAfter">commit</str>
      <str name="replicateAfter">optimize</str>
      <!--同时需要同步的配置文件,如词典等 -->
      <str name="confFiles">schema.xml,negative.dic,words-my.dic</str>
    </lst>
  </requestHandler>

 Solr从服务器192.168.2.92,$SOLR_HOME/news/conf/solrconfig.xml中相关配置如下:

  <requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="slave">
        <!--主索引的url,该从索引将从这个主索引地址同步索引-->
        <str name="masterUrl">http://192.168.2.92/solr/news/replication</str>; <!--间隔时间;如果此值为空从索引将不会主动从主索引同步索引;也可以通过solr的管理控制台来触发;-->
        <str name="pollInterval">00:00:30</str>
    </lst>
  </requestHandler>

上面是Solr的一个core(news)的配置,另外一个core(wb)也做同样的配置即可。

4. 结果

经过上述配置后,重新启动各Tomcat,然后在主服务器运行创建索引的线程时,从服务器会自动更新:可以在Tomcat后台查看到自动同步的信息,也可以在从服务器的Solr管理控制台的复制模块中看到当前的状态。  


转自:http://www.cnblogs.com/nayitian/archive/2013/03/01/2938085

相关问答

更多
  • 我常用 IKAnalyzer 分词, 至于庖丁分词 应该大同小异,你可以借鉴下 第一步,将 IKAnalyzer jar 放到 solr lib 文件夹下 第二步, solr core 的 schema.xml 定义一个自定义 类型,使用 IKAnalyzer 来解析(index&query) 第三步,此时 字段 就可以使用这个类型了 然后,就是些 IK的精细化 配置, 比如 同义词,词典 扩充等等,
  • 如果你正在进行手动复制(而不是真正的复制支持或SolrCloud),你应该真的,真的使用snap* -tools,而不是自己通过rsync来实现。 这些将确保在更改时复制索引, 并使索引读取器在文件同步时重新打开索引 。 最后一部分是需要提交的原因:在关闭当前索引阅读器并与新的索引读取器交换之前,新文件不可用。 You should really, really use the snap*-tools if you're doing manual replication (instead of the re ...
  • 如果您之前没有尝试过,可以按照故障排除SolR4索引进行操作 ,这可能有助于您解决问题。 此外,您可以始终尝试执行完整的SolR 4索引重建,如SolR 4索引中所述, 重建并监视有关SolR的应用程序服务器日志。 还要仔细了解如何配置搜索属性并记住它 属性的数据字典设置确定如何索引单个属性 If you didn't try before, you can follow the Troubleshooting SolR4 index which may help you to overcome your ...
  • 我不知道标准复制设置中Slave的任何自动核心检测/设置。 您可以通过软件使用CoreAdmin命令自行自动执行此操作。 或者,由于您要迁移到Solr 4,因此您应该考虑使用SolrCloud,因为这可能会提供您正在寻求的一些功能。 I do not know of any automatic core detection/setup for Slaves in the standard replication settings. You might be able to automate this you ...
  • 文档是一个很好的资源。 您可以在Alfresco服务器上运行安装程序,然后在Solr服务器上再次运行它。 在Alfresco服务器上,删除solr4 WAR。 在Solr服务器上,删除除Solr4 WAR之外的所有内容。 在alf_data中,有两个服务器上需要相同的密钥库目录。 您需要在Alfresco框中编辑alfresco-global.properties以指向Solr主机。 而且,您需要编辑Solr框中的alfresco-global.properties以指向solr索引。 在文档和这些提示之间 ...
  • 我在solrconfig.xml文件中添加了以下代码行 确保你的dist文件夹中的apache-solr-dataimporthandler-4.0.jar和apache-solr-dataimporthandler ...
  • 我认为最优化的方法是创建一个单独的集合或核心(取决于您是否使用云)并以某种方式索引数据,以便查询所需的查询结果。 当然,在某些情况下可能无法实现,但如果是在你的情况下,那就去做吧。 在这样的核心中,您只有与自动完成相关的字段和数据,因此在大多数情况下,它将比原始核心更小,更少的术语,这将导致更快的查询。 除此之外,此类核心或集合针对自动完成查询进行了优化,您将从中获得更多性能。 但是,如果您不能采用多核/集合方法,那么突出显示可能是最好的方法,如果您需要过滤。 在这种情况下,您可能希望打开术语验证器并使用F ...
  • 选择DataImportHandler。 下载postgresql的jdbc驱动程序并将其放在dist / dir中 将模块添加到配置文件: 按照Solr wiki的说明进行操作 请记住在scheme.xml中声明您的方案 在30分钟内完成。 Opte ...
  • Faceting是将搜索结果排列成类别(基于索引术语)。 在每个类别中, Solr报告相关术语的命中数,称为方面约束。 通过分面,用户可以轻松浏览电影网站和产品评论网站等网站上的搜索结果,其中类别中有许多类别和许多项目。 这是一个很好的例子...... Yonik面对的例子 solr wiki上的分面示例 在您的情况下,您可能需要再次触发查询以获取id和其他详细信息.... Faceting is the arrangement of search results into categories (whic ...