/// <summary> /// Inserts the passed data into elastic search index /// </summary> /// <param name="entities">The list of the entities that will be indexed</param> /// <param name="refresh">Flag to refresh index state with new data</param> public static void BulkInsertAttachment <T>(List <T> entities, bool refresh = true) where T : EsAttachment { if (entities.Count > 0) { entities[0].CreateIndex <T>(); var indexName = entities[0].IndexAlias; var esClient = Manager.EsClient; var descriptor = new BulkDescriptor(); descriptor.TypeQueryString("_doc"); foreach (var doc in entities) { descriptor.Index <T>(i => i .Index(indexName) .Document(doc) .Pipeline(doc.PipeLineName)); } var response = esClient.Bulk(descriptor); if (!response.IsValid) { throw new Exception(response.OriginalException.Message); } if (refresh) { esClient.Indices.Refresh(indexName); } } else { return; } }
/// <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); } }