Elasticsearch NEST добавить свойство в существующий индекс - PullRequest
0 голосов
/ 20 декабря 2018

Я хотел бы добавить новое свойство в существующий индекс, который уже содержит документы.

Исходный документ

[ElasticsearchType(Name = "mydocument", IdProperty = nameof(Id))]
public class MyDocument
{
    public Guid Id { get; set; } = Guid.NewGuid();

    [Date(Name = "occurredon")]
    public DateTime OccurredOn { get; set; }

    [Text(Name = "details")]
    public string Details { get; set; }
}

Как индекс был инициализирован и заполнен ...

var client = new ElasticClient(settings);
var createResponse = client.CreateIndex("myindex", d => d.Mappings(ms => ms.Map<MyDocument>(m => m.AutoMap())));

// index many documents...
var docs= new List<MyDocument>();
docs.Add(new MyDocument { OccurredOn = DateTime.UtcNow, Details = "foo1" });
docs.Add(new MyDocument { OccurredOn = DateTime.UtcNow, Details = "foo2" });
var indexResponse = await client.IndexManyAsync(docs, "myindex");

Теперь я хотел бы обновить документ, добавив свойство 'collector'.Новый документ будет выглядеть следующим образом ...

[ElasticsearchType(Name = "mydocument", IdProperty = nameof(Id))]
public class MyDocument
{
    public Guid Id { get; set; } = Guid.NewGuid();

    [Date(Name = "occurredon")]
    public DateTime OccurredOn { get; set; }

    [Text(Name = "details")]
    public string Details { get; set; }

    // new property
    [Text(Name = "collector")]
    public string CollectionHost { get; set; }
}

Какую одноразовую команду мне нужно ввести, чтобы добавить новое свойство collector?Я попробовал это, но это не удалось.

var z = await client.MapAsync(new PutMappingRequest("myindex", typeof(MyDocument)));

Я уверен, что это можно сделать, но, возможно, не с NEST, мне нужно было бы сделать это с API более низкого уровня?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Наверное, я скучаю, понял, что делали ES и Kibana.Я думал, что если я проиндексировал документ с дополнительными свойствами в существующий индекс, они были бы потеряныДумаю нет.Мне просто нужно было обновить Kibana, чтобы сделать его счастливым.

Короче говоря, я просто добавил документ, в котором использовалось обновленное POCO (тот, что содержит поле 'collector'), а затем обновил список полей Kibana дляindex и все вело себя как ожидалось.

Думаю, я сделал это сложнее, чем нужно.Не буду в последний раз, когда я что-то надумал.

0 голосов
/ 21 декабря 2018

Попробуйте

client.Update<MyDocument, object>(documentId, d => d
    .Doc(new 
    {
        Collector = "value"
    }));

Также, проверьте этот ответ для более подробной информации

https://stackoverflow.com/a/39029907/7327715

...