如何将数据从一个solr核心导入到另一个solr实例

如何将数据从一个solr核心导入到另一个solr实例,solr,lucene,data-import,zend-search-lucene,solr5,Solr,Lucene,Data Import,Zend Search Lucene,Solr5,我需要将数据从一个Solr实例导入到另一个实例完整数据和索引导入 我在谷歌上搜索了几次,但没有找到合适的解决方案。这是一个类似的问题,但我找不到正确的答案 我是Solr的新手,希望我能有所帮助 我有一个实时运行的实例运行在远程框中,我需要在另一个数据框中设置类似的数据。所以我认为完全的数据导入应该是可能的 我的问题是: 现有Solr是否支持完整数据集导入或任何工具?或 我需要为此编写一些自定义数据处理程序 提前感谢您提供的任何帮助或信息。这是我的研究得出的结论。您可以使用数据导入处理程序将数

我需要将数据从一个Solr实例导入到另一个实例完整数据和索引导入

我在谷歌上搜索了几次,但没有找到合适的解决方案。这是一个类似的问题,但我找不到正确的答案

我是Solr的新手,希望我能有所帮助

我有一个实时运行的实例运行在远程框中,我需要在另一个数据框中设置类似的数据。所以我认为完全的数据导入应该是可能的

我的问题是:

  • 现有Solr是否支持完整数据集导入或任何工具?或
  • 我需要为此编写一些自定义数据处理程序

提前感谢您提供的任何帮助或信息。

这是我的研究得出的结论。您可以使用数据导入处理程序将数据从一个SOLR实例拉入另一个SOLR实例,但是,尽管如此,它将只能索引源索引中的字段

有关更多详细信息,请阅读以下博客:


使用

中的XPathEntityProcessor,可以使用Solr DataImportHandler将数据从一个Solr实例导入到另一个Solr实例

  • 更新solrconfig.xml以配置DataImportHandler设置

    <requesthandler class="org.apache.solr.handler.dataimport.DataImportHandler" name="/dataimport">
    <lst name="defaults">
        <str name="config">solr-data-config.xml</str>
    </lst>
    
    
    solr-data-config.xml
    

  • 在data-config.xml中输入以下内容

    <dataConfig>
    <document>
       <entity name="solr_doc" processor="SolrEntityProcessor" 
        query="mimeType:pdf" 
        url="http://your.solr.server:8983/solr/your-core">
       </entity>
    </document>
    </dataConfig>
    
    
    
  • 转到目标Solr管理控制台,单击DataImport,从实体下拉列表中选择“Solr_doc”,然后单击Execute

  • 我发现以下链接很有用


    我遇到了一个类似的问题,我必须从生产环境复制到我们的QA环境。我们面临两个问题:

  • 防火墙阻止QA和生产之间的所有http通信
  • 由于大量写入和Zookeeper设置超时,无法进行快照
  • 因此,我创建了一个解决方案,只需通过select处理程序检索生产服务器上的所有文档,并将其转储到一个xml文件中,将这些文件复制到QA服务器,然后将它们放在导入可以提取它们的位置。我花了太多的时间来完成这项工作,这既是因为我对SOLR缺乏了解,也是因为互联网上的大多数示例都是错误的,每个人都只是在相互抄袭。因此,我在这里分享我的解决方案

    用于转储文档的脚本:

    #!/bin/bash
    SOURCE_SOLR_HOST='your.source.host'
    SOLR_CHUNK_SIZE=10000
    DUMP_DIR='/tmp/'
    
    indexesfile='solr-indexes.txt'
    for index in `cat $indexesfile`; do
      solrurl="http://${SOURCE_SOLR_HOST}:8983/solr/$index/select?indent=on&q=*:*&wt=xml"
      curl "${solrurl}&rows=10" -o /tmp/$index.xml
      numfound=`grep -i numfound /tmp/$index.xml | sed -e 's/.*numFound=\"\([0-9]*\)\".*/\1/'`
      chunks=$(expr $numfound / $SOLR_CHUNK_SIZE )
      for chunk in $( eval echo {0..$chunks}); do
        start_at=$(expr $chunk \* $SOLR_CHUNK_SIZE )
        curl "${solrurl}&rows=${SOLR_CHUNK_SIZE}&start=${start_at}" -o ${DUMP_DIR}solr/${index}_${chunk}.xml
      done
      rm /tmp/$index.xml
    done
    
    它从solr-indexes.txt文件中读取要转储的索引,因此您可以在其中定义所有索引

    在我的一次搜索中,我最终发现了这个问题,这里的答案在导入方面对我有所帮助,但不是全部。你看,如果你把Duvo和Segfaulter的例子复制粘贴到SOLR中,它们就不起作用了。例如,如果不使用正确的大小写,SOLR将忽略requestHandler标记

    这是我添加到solrconfig的正确格式:

      <lib dir="${solr.install.dir:../../../..}/dist" regex="solr-dataimporthandler-7.5.0.jar" />
      <lib dir="${solr.install.dir:../../../..}/dist" regex="solr-dataimporthandler-extras-7.5.0.jar" />
      <requestHandler class="org.apache.solr.handler.dataimport.DataImportHandler" name="/dataimport">
      <lst name="defaults">
          <str name="config">data-config.xml</str>
      </lst>
      </requestHandler>
    
    
    data-config.xml
    
    对于data-config.xml,我使用了类似的内容:

    <dataConfig>
      <dataSource type="FileDataSource" />
      <document>
        <entity
          name="yourindexhere"
          processor="FileListEntityProcessor"
          baseDir="/solr-import/"
          fileName="yourindexhere_.*"
          preImportDeleteQuery="*:*"
          recursive="false"
          rootEntity="false"
          dataSource="null">
          <entity
            name="file"
            processor="XPathEntityProcessor"
            url="${yourindexhere.fileAbsolutePath}"
            xsl="xslt/updateXml.xsl"
            useSolrAddSchema="true"
            stream="true">
          </entity>
        </entity>
      </document>
    </dataConfig>
    
    
    
    我将所有转储复制到/solr import/目录中,并将上述配置应用于每个索引配置。通过UI,我启动了完整导入,但您也可以通过dataimport请求触发

    xsl转换由默认的updateXml.xsl执行,因此它将理解SOLR创建的转储输出,并将其自动转换为索引模式。至少,如果生产和QA之间的模式相同的话


    此外,FileListenityProcessor还使用正则表达式来接收多个文件。这是必要的,因为我们的一些索引包含数百万项,如果您尝试一次性转换所有项,Java进程将很快耗尽内存。因此,我将它们分块到每个文件10000行,我发现这提供了最好的性能。

    您必须保持这两个实例之间的每日并发性,还是只创建另一个索引?因为您可以将整个核心(带索引)复制到新服务器上,然后
    solr start-s CORELOC
    就可以了。这是5+版本的。从来没有用过低于这个的。所以我不知道。我只需要从一台服务器复制到另一台服务器。您是否尝试将整个索引从一台服务器复制到另一台服务器,并将该索引用于新实例?我没有尝试过。。这会起作用的,但它不起作用。欢迎来到StackOverflow!请从链接中取出任何相关内容,并将其添加到您的答案中。链接很好,但是如果没有链接,你的答案应该仍然有用,以防页面被删除