public async Task <ICollection <Shakespeare> > Search(IElasticSearchFilter filters)
        {
            SetConnectionSettings();
            await EnsureConnected().ConfigureAwait(false);

            var result = await Client.SearchAsync <Shakespeare>(s => Selector(s, filters)).ConfigureAwait(false);

            return(result.Documents.ToList());
        }
        private ISearchRequest Selector(SearchDescriptor <Shakespeare> arg, IElasticSearchFilter filter)
        {
            var descriptor = arg.Query(q => q.Bool(b =>
            {
                var musts = new List <Func <QueryContainerDescriptor <Shakespeare>, QueryContainer> >();

                musts.Add(m => m.MatchPhrase(x => x.Field(f => f.Speaker)
                                             .Query("cornelio")
                                             .Boost(filter.GetSearchBoost(nameof(Shakespeare.Speaker)))));

                return(b.Must(musts));
            }));

            return(descriptor);
        }