删除solr文档而不提交

pgky5nke  于 2022-09-27  发布在  Solr
关注(0)|答案(2)|浏览(135)

对于我的用例,我将每天删除所有solr文档,并在其后为新的solr文档编制索引:
删除:

conf = {
        "set-property": [
            {"requestDispatcher.requestParsers.enableRemoteStreaming": True},
            {"requestDispatcher.requestParsers.enableStreamBody": True},
        ]
    }
resp = requests.post(f"http://{SOLR_HOST}:{SOLR_PORT}/solr/product_{country}/config", json=conf)

resp = requests.get(
        f"http://{SOLR_HOST}:{SOLR_PORT}/solr/product_{country}/update"
        + "?stream.body=<delete><query>*:*</query></delete>"
    )

插入:pySolr.solr.add_objects(..., commit=true, softCommit=true)
这似乎很管用。然而,如果在插入和删除之间添加断点,我会注意到我的solr核心是空的(0个文档)。在insert命令成功运行之前,有什么方法可以维护旧的solr文档吗?

rhfm7lfc

rhfm7lfc1#

您可以创建一个具有不同名称的新核心,然后在完成后删除旧核心。
删除旧文件后,可以使用所需名称重命名新文件。
下面是用于重命名核心的api。

admin/cores?action=RENAME&core=core-name&other=other-core-name

core:要重命名的Solr核心的名称。
other:Solr核心的新名称。

注意:您还可以检查SWAP是否适用于您的案例。SWAP自动交换用于访问两个现有Solr核心的名称
您可以参考文档here

kfgdxczn

kfgdxczn2#

如果您的用例只是删除所有记录并重新索引所有记录,那么假设您已经自定义生成了“id”字段,而不是自动生成,并且要重新索引的记录数量将等于或大于集合中的现有记录,并且在重新索引时,已存在的所有记录都将重新索引。这样就不必删除然后重新索引。索引具有相同id的现有文档将替换现有文档。从而消除了删除文档的步骤。

相关问题