Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Apache SOLR中保证提交的最佳方法是什么?_Solr_Solr4_Solrcloud - Fatal编程技术网

在Apache SOLR中保证提交的最佳方法是什么?

在Apache SOLR中保证提交的最佳方法是什么?,solr,solr4,solrcloud,Solr,Solr4,Solrcloud,问题:在将数据持久化到磁盘和可见性同等重要的情况下,如何使用Apache SOLR获得“保证提交” 背景:我们有一个网站,需要高端搜索功能进行机器学习,还需要保证金融交易的提交。我们只想将SOLR作为我们唯一的数据存储,使事情保持简单,不想使用另一个数据库 我似乎找不到这个问题的答案。对于金融交易来说,最简单的解决方案似乎是在记录被持久化后定期查询SOLR,但这可能会有更长的等待时间,或者有更好的解决方案吗 有谁能提出一个解决方案来实现SOLR的“保证承诺”吗 Solr提供了两种类型的提交来将数

问题:在将数据持久化到磁盘和可见性同等重要的情况下,如何使用Apache SOLR获得“保证提交”

背景:我们有一个网站,需要高端搜索功能进行机器学习,还需要保证金融交易的提交。我们只想将SOLR作为我们唯一的数据存储,使事情保持简单,不想使用另一个数据库

我似乎找不到这个问题的答案。对于金融交易来说,最简单的解决方案似乎是在记录被持久化后定期查询SOLR,但这可能会有更长的等待时间,或者有更好的解决方案吗


有谁能提出一个解决方案来实现SOLR的“保证承诺”吗

Solr提供了两种类型的提交来将数据持久化到Solr中

  • 软提交:软提交会将数据持久化到Solr数据结构中。Solr保证每次软提交后文档的可见性。它实际上并没有将数据存储到磁盘中。因此,如果Solr实例发生故障,则无法恢复此信息
  • 硬提交:每次应用程序将数据索引到solr时,它都可以执行数据的硬提交。硬提交将数据持久化到磁盘中,即使实例宕机,数据也可以恢复。频繁硬提交的缺点是,solr必须频繁执行段合并,这是CPU密集型的
您可以根据需要在solrconfig.xml中配置autoCommit选项

<autoCommit>
  <maxDocs>10000</maxDocs>
  <maxTime>1000</maxTime>
  <openSearcher>false</openSearcher>
</autoCommit>

和LucidWorks关于CloudSolr中的提交的一篇文章

Solr提供了两种类型的提交来持久化Solr中的数据

  • 软提交:软提交会将数据持久化到Solr数据结构中。Solr保证每次软提交后文档的可见性。它实际上并没有将数据存储到磁盘中。因此,如果Solr实例发生故障,则无法恢复此信息
  • 硬提交:每次应用程序将数据索引到solr时,它都可以执行数据的硬提交。硬提交将数据持久化到磁盘中,即使实例宕机,数据也可以恢复。频繁硬提交的缺点是,solr必须频繁执行段合并,这是CPU密集型的
您可以根据需要在solrconfig.xml中配置autoCommit选项

<autoCommit>
  <maxDocs>10000</maxDocs>
  <maxTime>1000</maxTime>
  <openSearcher>false</openSearcher>
</autoCommit>

和LucidWorks关于CloudSolr中的提交的一篇文章

答案是Solr不是设计成主要数据存储的。它的数据结构和索引/检索是为其他用例设计的,即使表面上看起来像是积垢。您应该将数据持久化到其他地方,然后在Solr中编制索引,以便以后查找。与Elasticsearch和其他面向搜索的软件相同


如果你一定要把这些东西结合起来,那就看看在Cassandra或其他类似数据库之上包含Solr的商业产品。

答案是Solr不是设计用来作为主要数据存储的。它的数据结构和索引/检索是为其他用例设计的,即使表面上看起来像是积垢。您应该将数据持久化到其他地方,然后在Solr中编制索引,以便以后查找。与Elasticsearch和其他面向搜索的软件相同


如果你一定要把这些东西结合起来,那就看看在Cassandra或其他类似数据库之上包含Solr的商业产品。

正如你在邮件列表上所知道的,Solr没有交易。如果您从十几个客户机编制索引,并且在某个地方进行了提交(autoSoftCommit、udpate请求上的commitWithin或这十几个客户机之一的显式提交),那么这十几个客户机编制的所有文档都将对所有搜索者可见

对于事务数据库,发送更新的十几个客户端中的每一个都必须发出提交,这只会使特定客户端所做的更改可见

Solr通常不会对提交做出任何保证。如果并行发出十次提交,则很可能超过maxWarmingSearchers配置,该配置通常设置为2。这十次提交中的大多数实际上不会创建新的搜索器,而这正是使新文档可见的原因


如果手动提交的方式永远不会超过maxWarmingSearchers,那么当提交完成且没有错误时,您可以将其视为所有更改现在都可见的标志。

正如邮件列表上告诉您的,Solr没有事务。如果您从十几个客户机编制索引,并且在某个地方进行了提交(autoSoftCommit、udpate请求上的commitWithin或这十几个客户机之一的显式提交),那么这十几个客户机编制的所有文档都将对所有搜索者可见

对于事务数据库,发送更新的十几个客户端中的每一个都必须发出提交,这只会使特定客户端所做的更改可见

Solr通常不会对提交做出任何保证。如果并行发出十次提交,则很可能超过maxWarmingSearchers配置,该配置通常设置为2。这十次提交中的大多数实际上不会创建新的搜索器,而这正是使新文档可见的原因


如果手动提交的方式永远不会超过maxWarmingSearchers,那么当提交完成时不会出错,您可以将此视为所有更改现在都可见的迹象。

是的,我理解软提交和硬提交之间的区别,但这并没有回答我关于如何保证应用层级别的提交的问题。你觉得怎么样