public async Task <EsHlFound <TDoc> > SearchAsync( string indexName, SearchParams <TDoc> searchParams, EsHlSelector <TDoc> highlight, CancellationToken cancellationToken) { if (searchParams == null) { throw new ArgumentNullException(nameof(searchParams)); } if (highlight == null) { throw new ArgumentNullException(nameof(highlight)); } if (string.IsNullOrWhiteSpace(indexName)) { throw new ArgumentException("Value cannot be null or whitespace.", nameof(indexName)); } var sr = await _cl.SearchAsync(GetSearchFunc(indexName, searchParams, highlight), cancellationToken); if (!sr.IsValid) { throw new EsSearchException <TDoc>(sr); } var foundDocs = sr.Hits.Select(h => new HighLightedDocument <TDoc>( h.Source, h.Highlight .Values .FirstOrDefault()? .FirstOrDefault() ) ); return(new EsHlFound <TDoc>(foundDocs.ToList(), sr.Total)); }
public Task <EsHlFound <TDoc> > SearchAsync(SearchParams <TDoc> searchParams, EsHlSelector <TDoc> hlSelector, CancellationToken cancellationToken = default) { return(_logic.SearchAsync(IndexName, searchParams, hlSelector, cancellationToken)); }
public Task <EsHlFound <TDoc> > SearchAsync(SearchParams <TDoc> searchParams, EsHlSelector <TDoc> hlSelector, CancellationToken cancellationToken = default) { if (_indexNameProvider == null) { throw new InvalidOperationException("Default index name is not defined"); } return(SearchAsync(_indexNameProvider.Provide <TDoc>(), searchParams, hlSelector, cancellationToken)); }
Func <SearchDescriptor <TDoc>, ISearchRequest> GetSearchFunc(string indexName, SearchParams <TDoc> searchParams, EsHlSelector <TDoc> highlight = null) { return(sd => { var s = sd.Index(indexName).Query(searchParams.Query); if (searchParams.Sort != null) { s = s.Sort(searchParams.Sort); } if (searchParams.Page != null) { s = s.From(searchParams.Page.From).Size(searchParams.Page.Size); } if (highlight != null) { s = s.Highlight(d => highlight(d)); } return s; }); }