public async Task <IResult> DeleteAllAsync <T>() where T : class
        {
            var response = await this._elasticClient.
                           DeleteByQueryAsync <T>(q => q.MatchAll());

            var result = new Result()
            {
                Success = response.IsValid,
                Message = response.DebugInformation
            };

            return(result);
        }
        public async Task <IResult> BulkIndexAsync <T>(IEnumerable <T> documents)
            where T : class
        {
            var bulkIndexResponse = await this._elasticClient.BulkAsync(b => b
                                                                        .Index(this._indexName)
                                                                        .IndexMany(documents));

            var result = new Result
            {
                Success   = bulkIndexResponse.IsValid,
                AffectRow = bulkIndexResponse.Items.Count()
            };

            return(result);
        }
        public async Task <IResult> CheckOrCreateIndexAsync <T>() where T : class
        {
            var existIndex = await this.ExistIndexAsync();

            if (existIndex)
            {
                return(new Result
                {
                    Success = true
                });
            }

            var createResponse = await this._elasticClient.Indices
                                 .CreateAsync(this._indexName, c => c.Map <T>(m => m.AutoMap()));

            var result = new Result()
            {
                Success = createResponse.IsValid,
                Message = createResponse.DebugInformation
            };

            return(result);
        }