对于我的用例,我将每天删除所有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文档吗?
2条答案
按热度按时间rhfm7lfc1#
您可以创建一个具有不同名称的新核心,然后在完成后删除旧核心。
删除旧文件后,可以使用所需名称重命名新文件。
下面是用于重命名核心的api。
core:要重命名的Solr核心的名称。
other:Solr核心的新名称。
注意:您还可以检查SWAP是否适用于您的案例。SWAP自动交换用于访问两个现有Solr核心的名称
您可以参考文档here
kfgdxczn2#
如果您的用例只是删除所有记录并重新索引所有记录,那么假设您已经自定义生成了“id”字段,而不是自动生成,并且要重新索引的记录数量将等于或大于集合中的现有记录,并且在重新索引时,已存在的所有记录都将重新索引。这样就不必删除然后重新索引。索引具有相同id的现有文档将替换现有文档。从而消除了删除文档的步骤。