簡體   English   中英

為什么Elasticsearch批量API無法解析我的JSON?

[英]Why can't Elasticsearch bulk API parse my JSON?

我有我此類JSON數據PUT經由HTTP請求到Elasticsearch API / _bulk端點荷蘭國際集團:

{"update":{"_id":1,"_type":"myType","_index":"myIndex"}}
{"doc":{"id":1,"name":"Foo"},"doc_as_upsert":true}
{"update":{"_id":2,"_type":"myType","_index":"myIndex"}}
{"doc":{"id":2,"name":"Bar"},"doc_as_upsert":true}

當我PUT通過郵差(谷歌的Chrome瀏覽器應用程序)的數據它成功地工作。

當我PUT通過我的Node.js腳本(一個數據request()調用),我得到這個錯誤:

{
  "error" : {
    "root_cause" : [ {
      "type" : "parse_exception",
      "reason" : "Failed to derive xcontent"
    } ],
    "type" : "parse_exception",
    "reason" : "Failed to derive xcontent"
  },
  "status" : 400
}

我正在雙向發送(假設是)完全相同的數據,但只有Postman在工作。 我以\\ n字符(包括最后一個)結束每一行,並且我相信自己的格式是正確的。

我做錯什么了嗎?

編輯:節點代碼(簡體):

var sourceData = JSON.parse(fs.readFileSync('test-data.json', 'utf8')),

sourceData.forEach(function(data) {
    var docid = data.id;

    updates.push(JSON.stringify({
        update: {
            _id: docid,
            _type: config.elasticsearch.type,
            _index: config.elasticsearch.index
        }
    }));

    updates.push(JSON.stringify({
        doc: data,
        doc_as_upsert: true
    }));
});

updates = updates.join("\n") + "\n";

request({
    uri: 'http://my-endpoint/_bulk',
    method: 'POST',
    data: updates,
    proxy: 'http://' + config.proxy.host + ':' + config.proxy.port
}, function() { ... });

您需要使用body參數發送更新,而不是data (適用於多部分請求)

request({
    uri: 'http://my-endpoint/_bulk',
    method: 'POST',
    body: updates,               // <---- change this
    proxy: 'http://' + config.proxy.host + ':' + config.proxy.port
}, function() { ... });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM