Node + ElasticSearch:在GET请求上发送正文?

时间:2014-03-20 14:01:22

标签: node.js get request elasticsearch node-request

我使用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);
    });
}

3 个答案:

答案 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。它对我有用,希望对其他人有帮助。