Elasticsearch Node.js 客户端:如何摄取 base64 编码的文档。
我已经使用 Kibana 成功创建了一个索引("描述"(和一个管道("附件"(来摄取 base64 编码的文档。
使用 Elasticsearch Node.js 客户端,我调用 client.index(( 来处理 base64 编码的文档,但返回了"ResponseError: Exception"。
代码包含在此问题中。
// KIBANA
PUT /descriptions
PUT _ingest/pipeline/attachment
{
"description" : "Extract attachment information",
"processors" : [
{
"attachment" : {
"field" : "data"
}
}
]
}
// NODE.JS code
// The 'data' variable is base64 encoded
function indexBase64Data(data) {
console.log(" ");
console.log("calling client.index()");
const index = client.index({
id: 101,
index: "descriptions",
pipeline: "attachment",
body: {
"data": data
}
});
index.then(() => {
console.log("Index was successful...");
},
(error) => {
console.error("ERROR in client.index: " + error);
})
}
// ERROR from client.index() is: "ResponseError: Exception"
我预计 base64 编码的文档将由 Elasticsearch 索引,但我收到此异常错误:"响应错误:异常">
也许client.index((不是正确的调用。如果是这样,我想就如何使用Elasticsearch Node.js客户端摄取附件提出建议。
答案是 base64 编码数据具有必须删除的前缀:
data:application/octet-stream;base64,Ym9vazoxfGFiY3xkZWYKYm9vazoyfE1ha2luZyB0aGUgTW9kZXJuIFdvcmxkfFZhY2xhdiBTbWlsCmJvb2s6M3xUYXAgRGFuY2luZyB0byBXb3JrOiBXYXJyZW4gQnVmZmV0fENhcm9sIExvb21pcwpib29rOjZ8VGhlIEhlYWRzcGFjZSBHdWlkZSB0byBNZWRpdGF0aW9uIGFuZCBNaW5kZnVsbmVzc3xBbmR5IFB1ZGRpY29tYmUKYm9vazo3fDIxIExlc3NvbnMgZm9yIHRoZSAyMXN0IENlbnR1cnl8WXV2YWwgTm9haCBIYXJhcmkKYm9vazo4fEJhZCBCbG9vZHxKb2huIENhcnJleXJvdQpib29rOjl8QXJteSBvZiBOb25lOiBBdXRvbm9tb3VzIFdlYXBvbnMgYW5kIHRoZSBGdXR1cmUgb2YgV2FyfFBhdWwgU2NoYXJyZQpib29rOjEwfEVkdWNhdGVkfFRhcmEgV2VzdG92ZXIK
删除前缀"data:application/octet-stream;base64,",并且代码有效。