Запрос 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"
});
Ответ 3
Посмотрите на эту проблему: https://github.com/elastic/elasticsearch-js/issues/186
Я думаю, нам нужно использовать переменную requestTimeout
, как указано выше.
Ответ 4
Что касается тайм-аутов в поиске эластичности, вам нужно различать два типа тайм-аутов:
Вы должны знать, что тайм-ауты на основе операций перезаписывают инициализацию requestTimeout
.