如何将数据从一个solr核心导入到另一个solr实例
我需要将数据从一个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实例,但是,尽管如此,它将只能索引源索引中的字段 有关更多详细信息,请阅读以下博客:
使用中的XPathEntityProcessor,可以使用Solr DataImportHandler将数据从一个Solr实例导入到另一个Solr实例
<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
<dataConfig>
<document>
<entity name="solr_doc" processor="SolrEntityProcessor"
query="mimeType:pdf"
url="http://your.solr.server:8983/solr/your-core">
</entity>
</document>
</dataConfig>
我遇到了一个类似的问题,我必须从生产环境复制到我们的QA环境。我们面临两个问题:
#!/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!请从链接中取出任何相关内容,并将其添加到您的答案中。链接很好,但是如果没有链接,你的答案应该仍然有用,以防页面被删除