elasticsearch,Javascript,Node.js,elasticsearch" /> elasticsearch,Javascript,Node.js,elasticsearch" />

Javascript 如何使用Node.js在Elasticsearch中索引1000多个文档?

Javascript 如何使用Node.js在Elasticsearch中索引1000多个文档?,javascript,node.js,elasticsearch,Javascript,Node.js,elasticsearch,我已经构建了一个Node.js应用程序,它将API的结果作为文档索引到Elasticsearch中,但ES总共只能索引1000个文档。总共有超过10万个需要索引。我似乎找不到任何地方解释如何将1k文档摄取限制更改为不同的数字 下面是我的代码示例,除了1k文档限制之外,它非常有用 ATX_TRAFFIC_INCIDENTS.data.map(async traffic => ( await client.index({ index: 'atx_tra

我已经构建了一个Node.js应用程序,它将API的结果作为文档索引到Elasticsearch中,但ES总共只能索引1000个文档。总共有超过10万个需要索引。我似乎找不到任何地方解释如何将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,
                    }
            }
        })
    ));

首先,没有内在的理由不能在ElasticSearch中插入超过1000个文档。您的问题很可能是由您的承诺映射引起的,这是一种反模式

通过映射承诺,您无法知道在函数完成之前是否有任何承诺得到了解决。您也无法对抛出的任何错误做出反应。您确实应该在每个承诺中添加一个
.catch()
,原因很简单,任何失败都会提醒您

将多个承诺作为一个组运行的正确方法是将承诺存储在一个数组中,并将其传递给
Promise.all()

Promise.all()
将等待您的所有承诺得到解决或拒绝,然后再将控制权返回到函数

使用
Promise.all()
的另一个优点是,一旦您的所有承诺都解决了,它将返回一个包含所有结果的数组,然后返回


有关更多信息,请参阅。

我建议您使用为所有文档编制索引,而不是像现在这样一次发送一个。错误似乎与API调用本身有关,因为它只返回1000个结果,而不是elasticsearch索引错误。我已经用try-catch块添加了错误处理,但仍然是API的服务器端问题