Неверный ответ NEST, созданный из неудачного низкоуровневого вызова на POST - PullRequest
0 голосов
/ 11 января 2019

Я хочу настроить NEST из кода C # Когда я использую команду Kibana GET /_cat/indices?v

Я получаю этот результат:

enter image description here

Мой тестовый индекс - "клиент"

Я использую Elasticsearch.Net и NEST: клиенты .NET [6.x] Эластичный "6.5.4", Вот как я настраиваюсь на C #:

  var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
.DefaultIndex("customer");

        var client = new ElasticClient(settings);



        var newCustomer = new Customer
        {
            name = "test_name",
            OS = "test_os",
            script = "test_script"
        };


        var indexResponse = client.IndexDocument(newCustomer);

и я получаю ошибку:

Invalid NEST response built from a unsuccessful low level call on POST: /customer/customer

почему он формирует запрос к / customer / customer ??? Что я неправильно настраиваю?

Сообщение об ошибке:

Неверный ответ NEST, созданный из-за неудачного низкоуровневого вызова на POST: / customer / customer Контрольный журнал этого вызова API: - BadResponse: Узел: http://localhost:9200/ Взял: 00: 00: 00.2817669 OriginalException: Elasticsearch.Net.ElasticsearchClientException: Удаленный сервер возвратил ошибку: (400) Недопустимый запрос .. Звоните: Код состояния 400 от: POST / клиент / клиент. ServerError: Тип: invalid_argument_exception Причина: «Отклонение обновления сопоставления для [customer], поскольку окончательное сопоставление будет иметь более 1 типа: [_doc, customer]» ---> System.Net.WebException: Удаленный сервер возвратил ошибку: (400) Недопустимый запрос.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

почему он формирует запрос к / customer / customer ??? Что я неправильно настраиваю?

Он строит его в customer (индекс) и customer (тип), потому что

  1. в запросе на индекс не указывается индекс, в который следует индексировать документ, поэтому в запросе используется настроенный по умолчанию индекс из ConnectionSettings
  2. запрос индекса не указывает тип для документа, поэтому NEST выводит имя типа из имени типа POCO, уменьшая его регистр.

Если вы хотите установить имя типа по умолчанию для всех POCO, вы можете использовать

var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
    .DefaultIndex("customer")
    .DefaultTypeName("_doc"); // <--- type name used for all POCOs
0 голосов
/ 11 января 2019

У вас уже есть сопоставление в ES, и документ, который вы хотите проиндексировать, не соответствует ему.

...