Exemple #1
0
        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);
        }
Exemple #3
0
        /// <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));
        }