public static List <BulkResult> ToBulkResult(this NestBulkResponse response) { var result = new List <BulkResult>(); if (response.Items != null) { result.AddRange(response.Items.Where(i => i.IsValid) .Select(item => BulkResult.Create(item.Id, StatusCodes.Status200OK, string.Empty))); } if (response.ItemsWithErrors != null) { result.AddRange(response.ItemsWithErrors .Select(item => BulkResult.Create(item.Id, StatusCodes.Status406NotAcceptable, item.Error.Reason))); } return(result); }
public BulkResults Bulk(string dataSetName, IEnumerable <object> documents, long requestSize, int parallelLimit) { var dataSet = DataSet(dataSetName).DataSet; var results = new BulkResults(); var validatedDocuments = documents .Select((document, index) => new { Index = index, Result = ValidateDocument(dataSetName, document), Document = document }) .ToList(); var invalidDocumentResults = validatedDocuments .Where(document => document.Result.IsFailure) .Select(document => BulkResult.Create( DocumentHelper.GetValue(document.Document, dataSet.IdField)?.ToString(), StatusCodes.Status400BadRequest, document.Result.Error) ) .ToList(); results.Results.AddRange(invalidDocumentResults); var documentElastics = validatedDocuments .Where(obj => obj.Result.IsSuccess) .Select(document => new DocumentElastic { Id = DocumentHelper.GetValue(document.Document, dataSet.IdField).ToString(), DocumentObject = document.Document, Text = DocumentHelper.GetConcatenatedText(document.Document, dataSet.InterpretedFields) }) .ToList(); var bulkResponseStruct = DocumentQuery(dataSetName).ParallelBulkIndex(documentElastics, parallelLimit, requestSize); results.Results.AddRange(bulkResponseStruct.ToBulkResult()); return(results); }
/// <summary> /// Bulk tag creation. /// </summary> /// <param name="settings">The settings.</param> /// <returns></returns> public Result <BulkResults> BulkCreate(string dataSetName, List <Tag> tags, int parallelLimit, long requestSize) { var results = new BulkResults(); var tagIsInteger = DataSet(dataSetName).TagIsInteger; if (tagIsInteger && tags.Any(tag => tag.Id.Any(ch => !char.IsDigit(ch)))) { results.Results = tags .Where(tag => tag.Id.Any(ch => !char.IsDigit(ch))) .Select(t => BulkResult.Create( t.Id, StatusCodes.Status400BadRequest, string.Format(TagResources.TagIdShouldBeIntegerType, t.ParentId, t.Id))) .ToList(); return(Result.Ok(results)); } var tagIdsByLevel = TagHelper.GetTagIdsByLevel(tags, item => item.ParentId, item => item.Id); var validIds = tagIdsByLevel.SelectMany(l => l.Value).ToList(); var invalidIds = tags.Select(t => t.Id).Except(validIds); if (invalidIds.Any()) { results.Results = tags .Where(t => invalidIds.Contains(t.Id)) .Select(t => BulkResult.Create(t.Id, StatusCodes.Status404NotFound, string.Format(TagResources.ParentId_0_NotFoundInTagWithId_1, t.ParentId, t.Id))).ToList(); // returns with OK status, individual items contain error code return(Result.Ok(results)); } var orderedTagElasticList = tagIdsByLevel .SelectMany(dic => dic.Value) .Select(id => { var tag = tags.FirstOrDefault(t => t.Id == id); var tagElastic = new TagElastic { Id = tag.Id, Name = tag.Name, ParentIdList = new List <string>() }; if (!string.IsNullOrWhiteSpace(tag.ParentId)) { tagElastic.ParentIdList.Add(tag.ParentId); } return(tagElastic); }) .ToList(); TagHelper.AdjustTagElastics(orderedTagElasticList); var tagQuery = TagQuery(dataSetName); tagQuery.DeleteAll(); var bulkResponseStruct = tagQuery.ParallelBulkIndex(orderedTagElasticList, parallelLimit, requestSize); results.Results.AddRange(bulkResponseStruct.ToBulkResult()); return(Result.Ok(results)); }