我正在尝试使用插入文档api的自动增量ID功能向我的elasticsearch索引创建原始NodeJS http请求。
所以这适用于curl
:
curl -XPOST http://host:3333/catalog/products -d '{ "hello": "world" }'
但是当我在nodejs中通过这个尝试相同的时候:
var http = require('http');
var options = {
protocol: 'http:',
mehtod: 'PUT',
hostname: 'host',
port: 3333,
path: '/catalog/products/'
}
http.request(options, ...);
它返回此错误:
No handler found for uri [/catalog/products/] and method [PUT]
但是,如果我在该路径的末尾添加id
,它将起作用。这有什么不对?
答案 0 :(得分:40)
此处的问题是POST
和PUT
的工作方式,当您使用POST
时,_id
是可选的,ES会生成一个唯一的_id
你每次都这样。
您正在使用PUT
,因此_id
必需,ES将使用该ID创建新文档,或者如果文件存在,则会使用该ID更新文档。您可以阅读more了解相关信息。
尝试使用POST
请求进行索引,就像使用curl
时一样,如果您不想指定ID
var options = {
protocol: 'http:',
hostname: 'host',
port: 3333,
path: '/catalog/products/',
method: 'POST' <--- specify method
}
希望这有帮助!