我正在使用官方Javascript客户端设置一个简单的Node.js REST服务来与Elasticsearch接口。我在本地运行此代码,但群集位于远程。当我通过浏览器使用_head
插件时,我可以毫无问题地连接ES和查询。但是,通过Javascript客户端执行此操作会超时所有请求。我设置了ElasticSearch对象,但向它发送任何请求都不起作用。我不认为这是一个网络问题,因为我可以通过浏览器访问ES。这就是我要求的东西,一个非常基本的获取:
var elasticsearch = require("elasticsearch");
var es = new elasticsearch.Client({
host: "https://my-address:9200/", // also tried without protocol part and trailing slashes
log: "error",
sniffOnStart: true
});
es.get({
index: "things",
type: "someThing",
id: "42"
}).then(doSomeStuff, handleStuffFailed);
此操作失败并显示一条简单的错误消息Errror: Request timeout after 30000ms.
我在这里遗漏了什么吗?我已阅读客户文档,这似乎是客户的基本“hello world”。
答案 0 :(得分:7)
由于 sniffOnStart ,我们在QBox上也遇到了这个问题。 试试这个配置:
var es = new elasticsearch.Client({
host: "my-address:9200",
log: "trace",
sniffOnStart: true
});
你会看到添加的节点ip是私有ip。 在我们这边,我们决定禁用嗅探并手动添加公共节点主机地址数组,如下所示:
var es = new elasticsearch.Client({
hosts: ["my-address1:9200", "my-address2:9200", "my-address3:9200"],
log: "error"
});
答案 1 :(得分:7)
在实例化ES客户端时尝试扩展 requestTimeout 参数。
client = new elasticsearch.Client({
host : 'http://localhost:9200',
requestTimeout: 60000
});
我有一个长时间运行的过程,花了不到10分钟。通过使requestTimeout值为60000(10分钟),该过程可以在没有超时的情况下完成。
答案 2 :(得分:2)
请点击此处查看此问题:https://github.com/elastic/elasticsearch-js/issues/186
我想我们需要使用上面提到的requestTimeout
变量。
答案 3 :(得分:1)
关于弹性搜索中的超时,您需要区分两种类型的超时:
初始化超时:初始化ES时:requestTimeout
,pingTimeout
,两者都默认为30000毫秒。阅读更多:Configuration documentation in elastic search documentation
基于操作的超时:许多操作,例如bulk
,create
,delete
,index
可以设置{{1也是。假设您要插入一个巨大的批量对象,您可以设置基于操作的超时:Elastic Search documentations
您应该知道基于操作的超时会覆盖初始化timeout
。
答案 4 :(得分:1)
如果看到
,请检查以下项目发现:30000ms后请求超时