Elasticsearch NEST 添加 属性 到现有索引
Elasticsearch NEST add property to existing index
我想向已包含文档的现有索引添加新的 属性。
原始文件
[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?
尝试
client.Update<MyDocument, object>(documentId, d => d
.Doc(new
{
Collector = "value"
}));
此外,请查看此答案了解更多详情
我想我想念 ES 和 Kibana 在做什么。我想如果我将具有附加属性的文档索引到现有索引中,它们就会丢失。可能不会。我只是需要刷新 Kibana 让它开心。
简而言之,我只是添加了一个使用更新后的 POCO(带有 'collector' 字段的文档)的文档,然后刷新了 Kibana 的索引字段列表,一切都按预期运行。
我想我把它变得比需要的更难了。不会是我最后一次想太多了。
我想向已包含文档的现有索引添加新的 属性。
原始文件
[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?
尝试
client.Update<MyDocument, object>(documentId, d => d
.Doc(new
{
Collector = "value"
}));
此外,请查看此答案了解更多详情
我想我想念 ES 和 Kibana 在做什么。我想如果我将具有附加属性的文档索引到现有索引中,它们就会丢失。可能不会。我只是需要刷新 Kibana 让它开心。
简而言之,我只是添加了一个使用更新后的 POCO(带有 'collector' 字段的文档)的文档,然后刷新了 Kibana 的索引字段列表,一切都按预期运行。
我想我把它变得比需要的更难了。不会是我最后一次想太多了。