private Task RefreshForConsistency(IRepositoryQuery query, ICommandOptions options)
        {
            // all docs are saved with immediate or wait consistency, no need to force a refresh
            if (DefaultConsistency != Consistency.Eventual)
            {
                return(Task.CompletedTask);
            }

            // if using immediate consistency, force a refresh before query
            if (options.GetConsistency() == Consistency.Immediate)
            {
                var indices = ElasticIndex.GetIndexesByQuery(query);
                return(_client.Indices.RefreshAsync(indices));
            }

            return(Task.CompletedTask);
        }
        protected virtual async Task <SearchDescriptor <T> > ConfigureSearchDescriptorAsync(SearchDescriptor <T> search, IRepositoryQuery query, ICommandOptions options)
        {
            search ??= new SearchDescriptor <T>();

            query = ConfigureQuery(query.As <T>()).Unwrap();
            var indices = ElasticIndex.GetIndexesByQuery(query);

            if (indices?.Length > 0)
            {
                search.Index(String.Join(",", indices));
            }
            if (HasVersion)
            {
                search.SequenceNumberPrimaryTerm(HasVersion);
            }

            search.IgnoreUnavailable();
            search.TrackTotalHits();

            await ElasticIndex.QueryBuilder.ConfigureSearchAsync(query, options, search).AnyContext();

            return(search);
        }