4

我正在使用 Node.js 和request模块来创建后端,我们选择 Elasticsearch 作为我们的数据存储。到目前为止一切都很好,除了似乎 Node 不支持 GET 请求的请求主体?这对于Elasticsearch 的_searchAPI来说是必要的,它只期望 GET 请求作为其语义设计的一部分。即使在 GET 请求的情况下,是否有强制 Node 发送请求正文的解决方案,或者_search在 Elasticsearch 上使用另一个 HTTP 动词的方法?

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);
    });
}
4

3 回答 3

6

_searchAPI 也接受POST动词。

于 2014-03-20T21:36:36.720 回答
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

于 2014-03-20T15:11:59.943 回答
0

几天前我遇到了这样的问题。

tld;博士使用 POST

根据https://www.elastic.co/guide/en/elasticsearch/guide/current/_empty_search.html#get_vs_post,您还可以将 POST 与弹性一起使用。

我用 axios 尝试过,但它返回所有数据,就像没有正文一样。所以我改用 POST 。它对我有用,我希望它对其他人有帮助。

于 2020-04-27T14:25:58.117 回答