我正在使用官方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".
尝试在实例化ES Client时扩展requestTimeout参数.
client = new elasticsearch.Client({ host : 'http://localhost:9200', requestTimeout: 60000 });
我有一个长时间运行的过程,花了不到10分钟.通过使requestTimeout值为60000(10分钟),该过程可以在没有超时的情况下完成.
由于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" });