Запрос Elasticsearch с Node раза

Я настраиваю простой сервис Node.js REST для взаимодействия с Elasticsearch, используя официальный Javascript-клиент. Я запускаю этот код локально, но кластер расположен удаленно. Когда я иду через браузер, с плагином _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.

Я что-то упустил? Я читал через клиентские документы, и это похоже на базовый "привет мир" для клиента.

Ответ 1

Попробуйте расширить параметр requestTimeout при создании экземпляра ES-клиента.

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

У меня был длительный процесс, который занял чуть меньше 10 минут. Сделав requestTimeout значение 60000 (10 минут), процесс может завершиться без выключения времени.

Ответ 2

У нас также была проблема с QBox из-за sniffOnStart. Попробуйте эту конфигурацию:

var es = new elasticsearch.Client({
    host: "my-address:9200",
    log: "trace",
    sniffOnStart: true
});

Вы увидите, что добавленные узлы ip являются частным ip. С нашей стороны мы решили отключить sniffing и вручную добавить массив общедоступных адресов node:

var es = new elasticsearch.Client({
    hosts: ["my-address1:9200", "my-address2:9200", "my-address3:9200"],
    log: "error"
});

Ответ 4

Что касается тайм-аутов в поиске эластичности, вам нужно различать два типа тайм-аутов:

Вы должны знать, что тайм-ауты на основе операций перезаписывают инициализацию requestTimeout.