我使用Node.js和request
模块来创建后端,我们选择Elasticsearch作为我们的数据存储。到目前为止一切正常,除了看起来Node似乎不支持GET请求的请求主体?这对于Elasticsearch's _search
API是必要的,它只期望GET请求作为其语义设计的一部分。是否存在强制Node即使在GET请求的情况下发送请求主体的解决方案,还是在Elasticsearch上使用另一个HTTP动词的_search
的意思?
function elasticGet(url, data) {
data = data || {};
return Q.nfcall(request.get, {
uri: url,
body: JSON.stringify(data) //<-- noop
}).then(function(response) {
return JSON.parse(response[1]);
}, function(err) {
console.log(err);
});
}
答案 0 :(得分:6)
_search
API也接受POST
动词。
答案 1 :(得分:1)
为简单起见,为什么不使用他们的api而不是手动发出请求?
简单的例子:
var elasticsearch = require('elasticsearch'),
client = new elasticsearch.Client({
host: '127.0.0.1:9200',
log: 'trace'
});
client.search({
index: '[your index]',
q: 'simple query',
fields: ['field']
}, function (err, results) {
if (err) next(err);
var ids = []
if (results && results.hits && results.hits.hits) {
ids = results.hits.hits.map(function (h) {
return h._id;
})
}
searchHandler(ids, next)
})
您可以将它与fullscale labs elastic.js结合起来,构建非常复杂的查询,非常快。 https://github.com/fullscale/elastic.js
答案 2 :(得分:0)
几天前,我遇到了这样的问题。
tld; dr 使用POST
根据https://www.elastic.co/guide/en/elasticsearch/guide/current/_empty_search.html#get_vs_post,您也可以将POST与elastic一起使用。
我使用axios进行了尝试,但是它返回的所有数据都没有主体。 所以我改用POST。它对我有用,希望对其他人有帮助。