【问题标题】:Node+ElasticSearch: Sending a body on a GET request?Node+ElasticSearch:在 GET 请求上发送正文?
【发布时间】:2014-03-20 14:01:21
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    _search API 也接受 POST 动词。

    【讨论】:

    • 我测试时会接受,目前无法访问开发计算机!
    【解决方案2】:

    为简单起见,为什么不使用他们的 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

    【讨论】:

    • 好吧,我尝试使用它,但由于某种原因它完全失败了,即使连接完美,所有请求也会超时。
    【解决方案3】:

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

    tld;dr 使用 POST

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

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

    【讨论】:

      猜你喜欢
      • 2020-04-25
      • 2022-01-25
      • 1970-01-01
      • 2016-08-24
      • 2017-06-23
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 2018-03-18
      相关资源
      最近更新 更多