Автоматическое сопоставление документа вasticsearch не работает с использованием NEST - PullRequest
1 голос
/ 30 апреля 2019

У меня есть простой фиктивный документ на C #. Я пытаюсь проиндексировать его вasticsearch впервые с помощью клиента NEST. Но автоматика не работает.

Мой фиктивный документ:

class DummyRecord {
    public string RecordName;
    public int RecordId;
}

И основная программа:

class Program
{
    static void Main(string[] args)
    {
        var node = new Uri("http://localhost:9200");
        var settings = new ConnectionSettings(node).DefaultTypeName("_doc");
        var client = new ElasticClient(settings);

        var doc = new DummyRecord {
            RecordName = "SOmething",
            RecordId = 1
        };

        var creaeIndexRespone = client.CreateIndex("DummyIndex",c => c.Mappings(ms=> ms.Map<DummyRecord>(m => m.AutoMap())));
        Console.WriteLine(creaeIndexRespone);

        var response = client.Index(doc, idx => idx.Index("DummyIndex"));
        Console.WriteLine(response);
        Console.ReadKey();
    }
}

Все, что я получаю, это следующий вывод:

Неверный ответ NEST, созданный из-за неудачного низкоуровневого вызова на PUT: / DummyIndex

Неверный ответ NEST, созданный из-за неудачного низкоуровневого вызова на POST: / DummyIndex / _doc

Как заставить эту вещь работать. Есть ли что-то, что я должен сделать при создании настроек больше, чем это?

var settings = new ConnectionSettings(node).DefaultTypeName("_doc");

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

Две вещи

  1. Имя индекса должно быть в нижнем регистре, т.е. "DummyIndex" -> "dummyindex"
  2. DummyRecord элементы должны быть свойствами, а не полями

Вы можете проверить, является ли ответ на любой вызов API действительным , и при необходимости принять меры

var client = new ElasticClient();

var createIndexResponse = client.CreateIndex(defaultIndex, c => c
    .Mappings(m => m
        .Map<DummyRecord>(mm => mm
            .AutoMap()
        )
    )
);

if (!createIndexResponse.IsValid) {
    Console.WriteLine(createIndexResponse.DebugInformation);
}
1 голос
/ 30 апреля 2019

Инициируйте свою окончательную модель и просто передайте эту модель в эластичный, чтобы индексировать ее.

На основе документации Elastic вы можете индексировать свои данные следующим образом.

    var person = new Person
{
    Id = 1,
    FirstName = "Martijn",
    LastName = "Laarman"
};

var indexResponse = client.IndexDocument(person); 

Обновлено: Index () и IndexDocument

IndexDocument() используется, если вы хотите просто проиндексировать отдельный документ.

Index() Если вам нужно задать дополнительные параметры, вы можете использоватьэтот метод.

Взгляните на документацию Elastic

...