Elastic Search 更新没有 return 任何 node.js 的结果
Elastic Search update doesn't return any result with node.js
我的代码中有一个弹性搜索连接,如下所示。
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"
当您说 "local terminal" 时,您是指笔记本电脑中的终端吗?
如果是这样,请注意 ElasticSearch 不应向 public Internet 开放,因为像这样公开您的数据库很容易发生数据泄漏(一次配置错误,您就完了)。
无论如何,如果您希望从某台计算机 A 连接到 ElasticSearch 但您无法连接,那么我首先要检查的是安全组,其中 VPC/subnet 数据库位于。如果数据库位于私有子网中(应该如此),那么从外部无法访问它是可以的。
想想您的安全模型应该如何工作。通常,您的 ElasticSearch 将位于私有子网中,您只能从连接到该子网且安全组规则允许的实例连接到它。
我的代码中有一个弹性搜索连接,如下所示。
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"
当您说 "local terminal" 时,您是指笔记本电脑中的终端吗? 如果是这样,请注意 ElasticSearch 不应向 public Internet 开放,因为像这样公开您的数据库很容易发生数据泄漏(一次配置错误,您就完了)。
无论如何,如果您希望从某台计算机 A 连接到 ElasticSearch 但您无法连接,那么我首先要检查的是安全组,其中 VPC/subnet 数据库位于。如果数据库位于私有子网中(应该如此),那么从外部无法访问它是可以的。
想想您的安全模型应该如何工作。通常,您的 ElasticSearch 将位于私有子网中,您只能从连接到该子网且安全组规则允许的实例连接到它。