public async Task <IBulkResponse> SaveAsync(List <SitePackChannel> sitepacks, CancellationToken cancellationToken) { var descriptor = new BulkDescriptor(); descriptor.Pipeline(ElasticConnectionClient.SITE_PACK_PIPELINE); descriptor.IndexMany(sitepacks); descriptor.Refresh(Elasticsearch.Net.Refresh.True); return(await _elasticConnectionClient.Client.Value.BulkAsync(descriptor, cancellationToken)); }
/// <summary> /// Force update country field /// </summary> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <IBulkResponse> SyncCountrySitePackAsync(CancellationToken cancellationToken = default) { _logger.LogInformation($"Lister les SitePackChannels"); var tvgSites = await _elasticConnectionClient.Client.Value.SearchAsync <SitePackChannel>(s => s .Index(_elasticConnectionClient.ElasticConfig.SitePackIndex) .Size(_elasticConnectionClient.ElasticConfig.MaxResultWindow) .From(0) , cancellationToken); var descriptor = new BulkDescriptor(); descriptor.Pipeline(ElasticConnectionClient.SITE_PACK_PIPELINE); descriptor.IndexMany(tvgSites.Documents); descriptor.Refresh(Elasticsearch.Net.Refresh.True); return(await _elasticConnectionClient.Client.Value.BulkAsync(descriptor, cancellationToken)); }
/// <summary> /// Insert or updates a list of entities into the index /// </summary> /// <param name="entities">The entities that will be inserted ot update</param> /// <param name="idField">The Id field expression</param> /// <param name="refresh">Flag to refresh index state with new data</param> public static async void UpsertAttachmentsAsync <T>(IList <T> entities, Expression <Func <T, object> > idField, bool refresh = false) where T : EsAttachment { var indexname = ""; var pipeline = ""; if (entities.Count > 0) { entities[0].CreateIndex <T>(); indexname = entities[0].IndexAlias; pipeline = entities[0].PipeLineName; } else { return; } var esClient = Manager.EsClient; var descriptor = new BulkDescriptor(); descriptor.TypeQueryString("_doc"); foreach (var doc in entities) { var idVal = Utils.GetObjectValue(idField, doc); Id idData = idVal.ToString(); descriptor.Pipeline(pipeline).Update <T>(op => op .Id(idData) .Index(indexname) .Doc(doc) .DocAsUpsert()); } var response = await esClient.BulkAsync(descriptor); if (!response.IsValid) { throw new Exception(response.OriginalException.Message); } if (refresh) { esClient.Indices.Refresh(indexname); } }
/// <summary> /// Synk picons /// </summary> /// <param name="picons"></param> /// <param name="reset">Delete the index and recreate it</param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <IBulkResponse> SynkAsync(IEnumerable <Picon> picons, bool reset = false, CancellationToken cancellationToken = default) { if (reset) { var res = await _elasticConnectionClient.Client.Value.DeleteByQueryAsync <Picon>(r => r.Query(rq => rq.Wildcard(f => f.Name, "*")), cancellationToken); if (!res.IsValid) { if (res.ServerError.Status != 404) { throw new ApplicationException(res.ServerError.Error.Reason, res.OriginalException); } } } var descriptor = new BulkDescriptor(); descriptor.Pipeline(ElasticConnectionClient.PICONS_RETREIVE_CHANNEL_NUMBER_PIPELINE); descriptor.IndexMany(picons); descriptor.Refresh(Elasticsearch.Net.Refresh.True); _logger.LogInformation($"Sync picons count : {picons.Count()}"); return(await _elasticConnectionClient.Client.Value.BulkAsync(descriptor, cancellationToken)); }