Добавить поле в уже проиндексированный документ - PullRequest
0 голосов
/ 31 августа 2018

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

Допустим, у меня есть родительский документ с именем "BidResponse", который я индексирую, затем я обновляю этот документ, чтобы добавить новые поля, используя дочерний элемент этого родителя. Но я также хотел бы добавить поле «Дата», которого нет ни в исходном дескрипторе сопоставления, ни в документах, которые я проиндексировал.

Возможно ли использование клиента NEST.NET 6 и как мне динамически добавлять это поле?

var connSettings = new ConnectionSettings(pool)
            .DefaultMappingFor<BidResponse>(m => m
                .IndexName(BuyPass.Shared.Helpers.Constants.BidResponseElasticSearchIndexName)
                .TypeName(nameof(BidResponse))
                .RelationName(nameof(BidResponse))
            )
            .DefaultMappingFor<SspWin>(m => m
                .IndexName(BuyPass.Shared.Helpers.Constants.BidResponseElasticSearchIndexName)
                .TypeName(nameof(BidResponse))
                .RelationName(nameof(SspWin))
            )
            .DefaultMappingFor<Impression>(m => m
                .IndexName(BuyPass.Shared.Helpers.Constants.BidResponseElasticSearchIndexName)
                .TypeName(nameof(BidResponse))
                .RelationName(nameof(Impression))
            );

var client = new ElasticClient(connSettings);
var map = new CreateIndexDescriptor(BuyPass.Shared.Helpers.Constants.BidResponseElasticSearchIndexName)
                .Mappings(ms => ms
                    .Map<BidResponse>(m => m
                        .AutoMap()
                        .Properties(ps => ps
                            .Nested<SeatBid>(n => n
                                .Name(c => c.SeatBids)
                                .AutoMap()
                            )
                        )
                    )
                );

if (!(await client.IndexExistsAsync(BuyPass.Shared.Helpers.Constants.BidResponseElasticSearchIndexName))
                .Exists)
{
      await client.CreateIndexAsync(map);
}

await esClient.IndexAsync(bidResponse,
            i => i.Id(bidResponse.Id).Index(_variableService.ElasticSearchBidResponseIndexName)
                .Type(typeof(BidResponse)));

**// Then I would like to upsert an other document and also bring a new field named Date** 
var esResponse = await esClient.UpdateAsync(DocumentPath<Impression>
                                .Id(impression.BidResponseId),
                            u => u
                                .Index(_variableService.ElasticSearchBidResponseIndexName)
                                .Type(typeof(BidResponse))
                                .DocAsUpsert()
                                .Doc(impression));
                                //.AddField("Date", DateTimeOffset.UtcNow) ?
...