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

Получаю такой результат:

enter image description here

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

Я использую Elasticsearch.Net и NEST: клиенты .NET [6.x] Elastic «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

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

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

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

1
Dmitriy Klyushin 11 Янв 2019 в 15:35

2 ответа

Лучший ответ

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

2
LeBigCat 11 Янв 2019 в 14:02

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

Он строит его как 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
-1
Russ Cam 11 Янв 2019 в 22:55