从节点请求Elasticsearch超时

我正在设置一个简单的Node.js REST服务来与Elasticsearch接口,使用官方的Javascript客户端。 我在本地运行此代码,但群集位于远程。 当我通过浏览器,使用_head插件,我可以连接ES和查询没有问题。 但是,通过Javascript客户端这样做超时了所有请求。 我设置了ElasticSearch对象,但是发送任何请求都不起作用。 我不认为这是一个networking问题,因为我可以通过浏览器访问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.

我在这里错过了什么? 我读过客户端文档,这看起来像客户端的基本“你好世界”。

尝试在实例化ES客户端时扩展requestTimeout参数。

 client = new elasticsearch.Client({ host : 'http://localhost:9200', requestTimeout: 60000 }); 

我有一个长达10分钟的漫长过程。 通过使requestTimeout值为60000(10分钟),过程可以完成而不超时。

由于sniffOnStart,我们在QBox上也有这个问题。 试试这个configuration:

 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" }); 

在这里检查这个问题: https : //github.com/elastic/elasticsearch-js/issues/186

我想我们需要使用上面提到的requestTimeoutvariables。

关于弹性search超时,您需要区分两种types的超时:

  • 初始化超时 :初始化ES: requestTimeoutpingTimeout默认为30000ms。 阅读更多: 弹性search文档中的configuration文档

  • 基于操作的超时bulkcreatedeleteindex等许多操作也可以设置timeout 。 说如果你有一个巨大的批量对象插入,你可以设置基于操作的超时: 弹性search文档

您应该知道基于操作的超时会覆盖初始化的RequestTimeout