elasticsearch Elasticsearch-嵌套-向上插入,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch Elasticsearch-嵌套-向上插入,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch Elasticsearch-嵌套-向上插入

elasticsearch Elasticsearch-嵌套-向上插入,elasticsearch,nest,elasticsearch,Nest,我有以下两门课 条目 public class Entry { public Guid Id { get; set; } public IEnumerable<Data> Data { get; set; } } 我有一堆不同的应用程序,它们向队列生成消息,然后在一个单独的应用程序中使用这些消息将数据存储在elasticsearch中 我为所有消息使用了一个CorrelationId,我想在elasticsearch中使用这个ID作为ID。 鉴于以下数据: var

我有以下两门课

条目

public class Entry
{
    public Guid Id { get; set; }
    public IEnumerable<Data> Data { get; set; }
}
我有一堆不同的应用程序,它们向队列生成消息,然后在一个单独的应用程序中使用这些消息将数据存储在elasticsearch中

我为所有消息使用了一个CorrelationId,我想在elasticsearch中使用这个ID作为ID。 鉴于以下数据:

var id = Guid.Parse("1befd5b62b944b4aa600c85632159e11");
var entries = new List<Entry>
{
    new Entry
    {
        Id = id,
        Data = new List<EntryData>
        {
           new EntryData
            {
                Data = DateTime.UtcNow,
                Type = "APPLICATION1_Received"
            },
            new EntryData
            {
                Data = DateTime.UtcNow,
                Type = "APPLICATION1_Validated"
            },
            new EntryData
            {
                Data = DateTime.UtcNow,
                Type = "APPLICATION1_Published"
            },
        }
    },
    new Entry
    {
        Id = id,
        Data = new List<EntryData>
        {
           new EntryData
            {
                Data = DateTime.UtcNow,
                Type = "APPLICATION2_Received"
            },
            new EntryData
            {
                Data = DateTime.UtcNow,
                Type = "APPLICATION2_Validated"
            },
            new EntryData
            {
                Data = DateTime.UtcNow,
                Type = "APPLICATION2_Published"
            },
        }
    },
    new Entry
    {
        Id = id,
        Data = new List<EntryData>
        {
           new EntryData
            {
                Data = DateTime.UtcNow,
                Type = "APPLICATION3_Received"
            },
            new EntryData
            {
                Data = DateTime.UtcNow,
                Type = "APPLICATION3_Validated"
            },
            new EntryData
            {
                Data = DateTime.UtcNow,
                Type = "APPLICATION3_Published"
            },
        }
    },

};

但这只是覆盖数据数组中已经存在的内容,计数是3而不是9(只保存Application3条目)


那么,有可能做我想做的事吗?我以前从未使用过elasticsearch,所以感觉可能我错过了一些简单的东西…:)

成功地解决了这个问题:

var result = await _elasticClient.BulkAsync(x => x.Index("journal").UpdateMany(entries, (descriptor, entry) => {
    var script = new InlineScript("ctx._source.data.addAll(params.data)")
    {
        Params = new Dictionary<string, object> {{"data", entry.Data}}
    };
    descriptor.Script(b => script);
    return descriptor.Upsert(entry);
}), cancellationToken);
var result=await\u elasticClient.BulkAsync(x=>x.Index(“journal”).UpdateMany(条目,(描述符,条目)=>{
var script=new InlineScript(“ctx.\u source.data.addAll(params.data)”)
{
Params=newdictionary{{“data”,entry.data}
};
Script(b=>Script);
返回描述符.Upsert(条目);
}),取消令牌);
var result = await _elasticClient.BulkAsync(x => x.Index("journal").UpdateMany(entries, (descriptor, entry) => {
    descriptor.Doc(entry);
    return descriptor.Upsert(entry);
}), cancellationToken);
var result = await _elasticClient.BulkAsync(x => x.Index("journal").UpdateMany(entries, (descriptor, entry) => {
    var script = new InlineScript("ctx._source.data.addAll(params.data)")
    {
        Params = new Dictionary<string, object> {{"data", entry.Data}}
    };
    descriptor.Script(b => script);
    return descriptor.Upsert(entry);
}), cancellationToken);