javascript - 如何批量发送请求?弹性搜索
问题描述
我有一个包含数据的对象,我想将此数据发送到 elasticsearch 容器
for(let key in params)
{
bulk.push(JSON.stringify({
index: {
_id: params[ key ][ 'id' ],
_type: 'id',
_index: 'geo'
}
}));
bulk.push(JSON.stringify(params[key]));
}
let bulks = bulk.join("\n") + "\n";
我提出了要求
let cat = request(
{
'method' : 'PUT',
'uri' : 'http://dev4.int10h.net:40024/_bulk',
'body' : bulks ,
'json' : true,
'headers':
[
'Content-Type: application/x-ndjson'
],
'agent' : false
}
);
但有错误
未处理的拒绝 StatusCodeError: 400 - {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"批量请求必须由换行符终止 [\n]"}],"type ":"illegal_argument_exception", "reason":"批量请求必须用换行符终止 [\n]"},"status":400在 Request.plumbing.callback (/usr/lib/node_modules/request- promise/node_modules/request-promise-core/lib/plumbing.js:104:33) 在 Request.RP$callback [as _callback] (/usr/lib/node_modules/request-promise/node_modules/request-promise-core/ lib/plumbing.js:46:31) 在 Request.self.callback (/usr/lib/node_modules/request/request.js:185:22) 在 Request.emit (events.js:182:13) 在 Request. (/usr/lib/node_modules/request/request.js:1161:10) 在 IncomingMessage 的 Request.emit (events.js:182:13)。(/usr/lib/node_modules/request/request.js:1083:12) 在 Object.onceWrapper (events.js:273:13) 在 IncomingMessage.emit (events.js:187:15) 在 endReadableNT (_stream_readable.js :1098:
如何正确发送批量?
解决方案
不确定这是否对您有帮助,但在这里_bulk
我发现了与and 类似的问题JSON.stringify
。
答案是:
看起来您的有效负载中的元字符没有被翻译成换行符。如果您改为使用 elasticsearch.js客户端,它会为您处理这个问题。
推荐阅读
- laravel - 在 laravel 中排除的 VerifyCsrfToken 路由中注销用户
- android - Google Play 商店拒绝应用更新但测试了错误的 APK
- ida - 在 IDA 工具栏中找不到插件菜单
- python - 您如何使用 python 识别(但不修复)csv 文件中的空值或重复值?
- c# - 如何用意大利语编写日期并将意大利语设置为 ASP.Net C# 中的默认语言
- reactjs - 禁止传播道具 - React Dropzone
- python - 使用 IF 函数来区分应该使用哪个 sqlite 查询?
- reactjs - React 如何通过在循环中赋值来获取当前的 ref 数据?
- php - HMVC codeigniter ERR_TOO_MANY_REDIRECTS 错误
- c - 编译器警告:在赋值时将整数转换为指针