【问题标题】:Elastic Search update doesn't return any result with node.js弹性搜索更新不返回任何 node.js 的结果
【发布时间】:2020-05-23 05:50:35
【问题描述】:

我的代码中有一个弹性搜索连接,如下所示。

const config = require('../../config/index');
const logger = require('winston');

var elasticsearch = require('elasticsearch');
var elasticClient;

var state = {
  connection: null,
}

exports.connect = function (done) {
try {
    logger.info("elasticsearch 000");
    if (state.connection) return done()
    elasticClient = new elasticsearch.Client({
      host: config.elasticSearch.url,
      log: 'info'
    });

    state.connection = elasticClient;
    logger.info("elasticsearch connected on url : ", config.elasticSearch.url);
    done()

  } catch (e) {
    logger.info("elasticsearch connect exception ", e)
  }

}

exports.get = function () {
  return state.connection
}

我就是这样使用这个连接的……

function Update(_id, data, callback) {    
 elasticClient.get().update({
    index: indexName,
    type: tablename,
    id: _id,
    retry_on_conflict: 5,
    body: {
        doc: data,
        doc_as_upsert: true
    }
 }, (err, results) => {
    if (err) {
        console.log("= = = = [elasticClient Update err]= = = = =", err);
    }
    return callback(err, results)
})

}

问题:当我调用这个 update 函数时,它没有返回任何数据......我得到了这个错误......

error :  StatusCodeError: Request Timeout after 30000ms
/node_modules/elasticsearch/src/lib/transport.js:397:9

注意:对于 Elastic Search 连接,我使用的是 Amazon Elastic Search 服务并且我正在传递它的 VPC 终端节点。

节点版本: 12.14.1

Elasticsearch version 6.3

Package.json : "elasticsearch": "16.6.0"

【问题讨论】:

  • 尝试使用curl 来确定是 Node.js 库的问题还是服务器无法访问。像这样的东西:curl http://myserver:myport/_cat/health
  • 当我在实例中运行 curl 时,我得到了状态为黄色的数据。但是,如果我从本地终端发出命令,那么我没有得到任何资源。实际上我对此很陌生,所以我不知道这是否正确。
  • 尽管 AWS kibana 链接没有在浏览器中打开,并且在 AWS 控制台中显示为绿色。
  • 您认为,问题应该与安全组有关吗?
  • 当您说“本地终端”时,您是指笔记本电脑中的终端吗?如果是这样,请注意 ElasticSearch 不应该对公共 Internet 开放,因为这样暴露您的数据库很容易导致数据泄漏(一次配置错误,您就完成了)。无论如何,如果您希望从某台计算机 A 能够连接到 ElasticSearch 而您无法连接,那么我首先要检查的是安全组以及数据库所在的 VPC/子网。如果数据库位于私有子网中(应该如此),那么无法从外部访问它是可以的。

标签: node.js elasticsearch amazon-elasticsearch


【解决方案1】:

当您说“本地终端”时,您是指笔记本电脑中的终端吗? 如果是这样,请注意 ElasticSearch 不应该对公共 Internet 开放,因为这样暴露您的数据库很容易导致数据泄漏(一个错误配置就完成了)。

无论如何,如果您希望从某台计算机 A 连接到 ElasticSearch 而您无法连接,那么我首先要检查的是安全组以及数据库所在的 VPC/子网。如果数据库位于私有子网中(应该如此),那么无法从外部访问它是可以的。

想想您的安全模型应该如何工作。通常,您的 ElasticSearch 将位于私有子网中,并且您只能从连接到该子网并且在您的安全组规则中允许的实例连接到它。

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多