我正在尝试使用插入文档api的自动增量id功能向我的elasticsearch索引发出原始NodeJS http请求。
所以这适用于curl:
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在该路径的末尾添加一个,它将起作用。怎么了
id
这里的问题是方式POST和PUT工作方式,当您使用时POST,它_id是可选的,ES _id每次都会为您生成一个唯一的。
POST
PUT
_id
在这里,您使用的是PUT这样_id的 要求 ,ES将可以创建与ID一个新的文档,或者如果它存在,它将具有该ID更新文档。您可以阅读有关此内容的更多信息。
如果您不想指定id,请尝试像处理索引那样对POST请求进行索引curl
var options = { protocol: 'http:', hostname: 'host', port: 3333, path: '/catalog/products/', method: 'POST' <--- specify method }
希望这可以帮助!