Обновление до Elastic Search NEST 7.0.1 нарушает код, который проверяет, существует ли индекс - PullRequest
2 голосов
/ 06 июля 2019

После обновления 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 ]

1 голос
/ 07 июля 2019

Я думаю, что сообщение, которое вы видите, рассказывает вам все.

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.

То же поведение при попытке сделать это через kibana:

enter image description here

enter image description here

ОБНОВЛЕНИЕ:

При тестировании следующего кода с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

Надеюсь, это поможет.

0 голосов
/ 10 июля 2019

Та же проблема здесь. После обновления до 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

...