solr8.8.0中的autoSoftCommit设置

ve7v8dk2  于 2022-10-21  发布在  Solr
关注(0)|答案(1)|浏览(188)

我当前的索引大约需要1:30小时。这太长了,因为我想更新NRT,我已经启用了autoCommit和autoSoftCommit,如下所示

<autoCommit>
     <maxTime>${solr.autoCommit.maxTime:600000}</maxTime> <!-- 10 minutes -->
     <openSearcher>false</openSearcher>
</autoCommit>

<autoSoftCommit>
  <maxTime>${solr.autoSoftCommit.maxTime:300000}</maxTime> <!-- 5 minutes -->
</autoSoftCommit>

问题是,每次完全导入开始时,它都会清除旧文档,这违背了启用autoSoftCommit的目的。我不知道我在这里错过了什么。我的期望是保留上一个索引中的文档,并在现有文档中添加新文档或替换重复文档。
如果禁用autoSoftCommit,则它不会删除文档。
索引由cronjob启动。URL为http://localost:8983/solr/mycore/dataimport?clean=true&commit=true&command=full-导入
感谢任何帮助。谢谢

yfwxisqw

yfwxisqw1#

当您提交时,如果您发出了删除命令,则最终会清除索引。如果不希望删除可见,请不要发出提交。你不能同时拥有这两种方式——你不能先清除索引,然后再期望文档在不提交删除的情况下逐渐出现。完全导入就是这样——它清除索引,导入当前存在的任何文档,然后提交。如果您想提前提交,这意味着可以看到索引的清理。
一般来说,当谈论近实时时,我们谈论的是通过常规/update端点提交文档,并在一两秒内看到这些更改。当您使用dataimportandler进行完整导入时,必须先运行整个导入,然后才能看到任何更改。
如果您仍然想使用dataimportandler(它已在9年从Solr核心中删除,现在是一个社区项目),则必须配置delta导入,而不是使用完整的导入支持。通过这种方式,您只会获得那些已添加、删除或更改的文档的更改,而且您不必发出删除(URL的clean部分),因为任何删除都应该由delta查询处理。这要求您的数据库有一种方法来跟踪给定行的更改时间,以便您只能导入和处理那些实际更改的行(如果您希望它有效的话)。
如果您无法在数据库层中跟踪这一点,那么您只能按照当前的方式进行操作-但在这种情况下,请禁用软提交,并在导入完成后让更改可见。
混合方法也是可能的,在白天进行delta更新和手动提交/update,然后在晚上运行完整索引以确保Solr和数据库匹配。这将取决于您对处理Solr和数据库之间的任何差异所需的速度的要求(即,如果您错过了提交删除-如果直到深夜才删除,这是否至关重要?)

相关问题