首页 > 解决方案 > Elasticsearch NEST 将属性添加到现有索引

问题描述

我想向已经包含文档的现有索引添加一个新属性。

原始文件

[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; }
}

我必须发出什么一次性命令才能添加新的“收集器”属性?我试过这个,但它失败了。

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

我确信这可以做到,但也许不能用 NEST,我需要用较低级别的 API 来做吗?

标签: c#elasticsearchnest

解决方案


我想我想念 ES 和 Kibana 在做什么。我想如果我将具有附加属性的文档索引到现有索引中,它们将会丢失。可能不会。我只需要刷新 Kibana 即可让它开心。

简而言之,我刚刚添加了一个使用更新后的 POCO(具有“收集器”字段的文档)的文档,然后刷新了 Kibana 的索引字段列表,一切都按预期运行。

猜猜我让这变得比它需要的更困难。不会是最后一次我想太多。


推荐阅读