首页 > 解决方案 > 如何批量发送请求?弹性搜索

问题描述

我有一个包含数据的对象,我想将此数据发送到 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","re​​ason":"批量请求必须由换行符终止 [\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:

如何正确发送批量?

散装型string 在此处输入图像描述

标签: javascriptelasticsearchrequestbulkrequest-promise

解决方案


不确定这是否对您有帮助,但在这里_bulk我发现了与and 类似的问题JSON.stringify

答案是:

看起来您的有效负载中的元字符没有被翻译成换行符。如果您改为使用 elasticsearch.js客户端,它会为您处理这个问题。


推荐阅读