Обновление до Elastic Search NEST 7.0.1 нарушает код, который проверяет, существует ли индекс
После обновления Elastic Search NEST с 7.0.0-alpha2 до 7.0.1 я больше не могу использовать метод IndexExistsAsync в Nest.ElasticClient.
Согласно документации, метод удален и является критическим изменением, поэтому я изменил вызов ElasticClient.Indices.ExistsAsync следующим образом:
Старый код:
var existsResponse = await _elasticClient.IndexExistsAsync(model.Name);
Новый код:
var existsResponse = await _elasticClient.Indices.ExistsAsync(model.Name);
И с новым кодом я получаю следующий ответ, который не очень помогает в поиске и устранении проблемы:
Invalid NEST response built from a successful (404) low level call on HEAD: /12-e449636ee7e1eb1343414698c95ce1e1
Audit trail of this API call:
- [1] HealthyResponse: Node: http://localhost:9200/ Took: 00:00:00.1208228
Request:
Request stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.
Response:
Response stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.
Настройка connectionSettings.DisableDirectStreaming(true);
не помогло и я получаю точно такой же ответ.
Любая помощь высоко ценится.
2 ответа
Я думаю, что сообщение, которое вы видите, говорит вам все.
Invalid NEST response built from a successful (404) low level call on HEAD: /12-e449636ee7e1eb1343414698c95ce1e1
response built from a successful
- вызов asticsearch был успешным, но статус 404 (не существует) был возвращен и сопоставлен с existsResponse.Exists
который false
в этом случае. Дополнительная информация о запросе / ответе не прилагается, поэтому вы видите:
Request:
Request stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.
Response:
Response stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.
Такое же поведение при попытке сделать это через кибану:
ОБНОВИТЬ:
При тестировании следующего кода с asticsearch 7.2.0 и NEST 7.0.1
var client = new ElasticClient(connectionSettings);
await client.Indices.CreateAsync("documents");
var exists = await client.Indices.ExistsAsync("documents");
Console.WriteLine($"Index created, exists?: {exists.Exists}");
await client.Indices.DeleteAsync("documents");
exists = await client.Indices.ExistsAsync("documents");
Console.WriteLine($"Index deleted, exists?: {exists.Exists}");
печать
Index created, exists?: True
Index deleted, exists?: False
Надеюсь, это поможет.
Та же проблема здесь. После обновления до Nest 7 (как 7.0.0, так и 7.0.1) для кластера ElasticSearch с версией 7.2.0 мы получаем следующее сообщение:
Неверный ответ NEST, созданный из-за неудачного (502) низкоуровневого вызова на HEAD: /leads_2019.07
Контрольный журнал этого вызова API:
- [1] BadResponse: Узел: http://xxx:9200/ Взял: 00: 00: 00.1931249
OriginalException: Elasticsearch.Net.ElasticsearchClientException: не удалось выполнить запрос. Звоните: Код состояния 502 от: HEAD /leads_2019.07
Мы получаем ту же ошибку против кластера с версией 6.8.1