elasticsearch nest将属性添加到现有索引

yqyhoc1h  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(2)|浏览(361)

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

[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来实现?

acruukt9

acruukt91#

尝试

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

另外,请查看此答案以了解更多详细信息
https://stackoverflow.com/a/39029907/7327715

6jygbczu

6jygbczu2#

我想我不明白埃斯和Kibana在做什么。我想,如果我将一个具有附加属性的文档索引到现有索引中,它们就会丢失。我猜不是。我只是想让kibana开心一下。
简言之,我只是添加了一个文档,它使用了更新后的poco(具有“collector”字段的文档),然后刷新了kibana的索引字段列表,一切都按预期进行。
我想我把这件事搞得比实际困难多了。不会是我最后一次想得太多了。

相关问题