示例#1
0
        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));
        }
示例#2
0
 public Task <EsHlFound <TDoc> > SearchAsync(SearchParams <TDoc> searchParams, EsHlSelector <TDoc> hlSelector, CancellationToken cancellationToken = default)
 {
     return(_logic.SearchAsync(IndexName, searchParams, hlSelector, cancellationToken));
 }
示例#3
0
        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));
        }
示例#4
0
        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;
            });
        }