背景: 我试图实现的是使用单个 API 调用从弹性中删除多个值。我们的应用程序使用Node-Red来创建后端API。
我正在使用下面的 curl 命令来删除多个文档 ID,它就像一个魅力。它会删除使用 id 的xxxxx
和yyyyy
找到的文档。
POST /tom-access/doc/_delete_by_query
{
"query": {
"terms": {
"_id": [
"xxxxx",
"yyyyy"
]
}
}
}
但是,当我尝试通过 Node-Red(使用 JavaScript 函数)执行相同的操作时,我得到以下错误。
{">错误":{"root_cause":[{"类型":"action_request_validation_exception","原因":"验证 失败:1:查询为 缺失;"}],"类型":"action_request_validation_exception","原因":"验证 失败:1:查询丢失;"},"状态":400}
以下是我在 Node-Red JavaScript 函数中的内容:
if (!msg.headers) msg.headers = {};
msg.req = {
"query": {
"terms": {
"id": [
"xxxxx",
"yyyyy"
]
}
}
};
msg.headers = {
"Content-Type": "application/json",
"Authorization" : "Basic xxxxxxxxxxxxxxxxxxxxx"
};
msg.method = "POST"
// New elastic
msg.url = "http://elastic.test.com/tom-access/doc/_delete_by_query";
return msg;
下一个节点使用上面的对象进行 HTTP CALLmsg
但会导致上述错误。我也是Node-Red,JavaScript和Elastic的新手。哎呀!!
终结点可能期望查询位于请求正文中。
您应该将其设置为msg.payload
而不是msg.req
。