【发布时间】:2020-12-14 05:21:40
【问题描述】:
我每周进行一次导入作业,它将所有记录从 MongoDB 插入到 ElasticSearch。
我正在做的事情如下:
- “主”索引中已存在记录
- 我将所有新记录插入到 'main-temp' 索引中
- 我删除了“主”索引
- 我将“main-temp”重新索引为“main”
- 我删除了 'main-temp' 索引
我在同一数据集上本地运行该操作。
我注意到的是,新“主”索引中的记录数与导入“主临时”索引的记录数不匹配。
这是我正在使用的代码
try {
await client.indices.delete({index: "main"})
Logger.info('Old Index Deleted')
await client.indices.create({ index: 'main' })
Logger.info('New Index Created')
await client.reindex({
waitForCompletion: true,
refresh: true,
body: {
source: {
index: 'main-temp'
},
dest: {
index: 'main'
}
}
})
Logger.info('Temp Index Reindexed/Cloned')
await client.indices.delete({index: "main-temp"})
Logger.info('Temp Index Deleted')
} catch(e) {
Logger.error(e)
}
我使用的是 Elastic search 6.8.9,所以我不能使用 Clone API,因为它是 7.X 的一部分
检查下面的屏幕截图的结果,事情是每当它重新索引的记录数是不同的(通常较小的几千)
https://i.stack.imgur.com/g1u0J.png
更新:这是我从 reindex 中得到的响应(如果我确实让 result = await )
有时它得到正确的数字,有时不是。
took: 22357,
timed_out: false,
total: 673637,
updated: 0,
created: 673637,
deleted: 0,
batches: 674,
version_conflicts: 0,
noops: 0,
retries: { bulk: 0, search: 0 },
throttled_millis: 0,
requests_per_second: -1,
throttled_until_millis: 0,
failures: []
【问题讨论】:
-
当然,您确定 MongoDB 始终包含完全相同数量的记录?您从 reindex 调用中得到什么响应?
-
是的,我确定。事情是,我没有刷新数据库,在我的本地测试中,我总是在读取同一个数据库。 (不变)
-
我的第二个问题呢?
-
如果我期望重新索引的结果,我得到这个错误:[“事件”参数需要是一个字符串。]。如果我不让结果 = 并且只等待,那么一切都很好。我在克隆索引上遇到了同样的错误。
-
设置
waitForCompletion: false,然后在开发工具中运行GET _tasks?actions=*reindex&detailed。你得到了什么?
标签: node.js elasticsearch