我已经构建了一个Node.js应用程序,它将来自API的结果作为文档索引到Elasticsearch中,但是ES总共只能索引1000个文档。总共有超过100k的数据需要被索引。我似乎找不到任何地方来解释如何将这个1k文档摄取限制更改为不同的数字。
以下是我的代码示例,除了1k文档限制之外,它工作得很好。
ATX_TRAFFIC_INCIDENTS.data.map(async traffic => (
await client.index({
index: 'atx_traffic',
id: traffic.traffic_report_id,
type: 'data',
body: {
traffic_report_id: traffic.traffic_report_id,
published_date: traffic.published_date,
issue_reported: traffic.issue_reported,
status_date: traffic.traffic_report_status_date_time,
status: traffic.traffic_report_status,
address: traffic.address,
latitude: traffic.latitude,
longitude: traffic.longitude,
location:
{
lat: traffic.latitude,
lon: traffic.longitude,
}
}
})
));发布于 2019-09-18 05:06:01
首先,不存在不能将超过1000个文档插入到ElasticSearch中的内在原因。您的问题很可能是由映射到您的承诺引起的,这是一种反模式。
通过映射Promises,您无法知道它们中是否有任何在函数完成之前解析。您也无法对抛出的任何错误做出反应。你真的,真的应该为每个Promise添加一个.catch(),原因很简单,任何失败都可以提醒你。
将多个Promise作为一个组运行的正确方法是将您的Promise存储在一个数组中,然后将该数组传递给Promise.all()。
Promise.all()会一直等到你的所有承诺都被解决或拒绝后,才会将控制权交还给你的函数。
使用Promise.all()的另一个好处是,一旦您的所有承诺都解决了,它将返回一个包含所有结果的数组,然后返回。
有关详细信息,请参阅ES6 Promises: Patterns and Anti-Patterns。
https://stackoverflow.com/questions/57977285
复制相似问题