public async Task <Response <List <post> > > HotSuggest(DTO.Input.SearchInput search) { Response <List <post> > response = new Response <List <post> >(); try { Func <SearchDescriptor <post>, ISearchRequest> request = s => s.Index("knowledgebase").Type(typeof(post).Name.ToLower()). Size(10).Query(q => q.Match(m => m.Field(f => f.Type).Query(search.Type)) && q.Match(m => m.Field(f => f.Locked).Query(search.Locked)) && q.Match(m => m.Field(f => f.State).Query(search.State))) .Source(sou => sou.Includes(f => f.Field(ff => ff.Type).Field(ff => ff.Locked).Field(ff => ff.State).Field(ff => ff.Title).Field(ff => ff.Views).Field(ff => ff.CreateTime).Field(ff => ff.Likes).Field(ff => ff.Category).Field(ff => ff.PostGuid))). Sort(sort => { if (search.Sort == (int)SearchSort.Views) { return(sort.Descending(p => p.Views)); } if (search.Sort == (int)SearchSort.Recent) { return(sort.Descending(p => p.CreateTime)); } return(sort.Descending(SortSpecialField.Score)); }); Tuple <long, List <post> > result = await _search.Search <post>(request); response.Data = result.Item2; } catch (Exception ex) { response.Status = 0; response.Msg = ex.Message.ToString(); } return(response); }
public async Task <Response <List <post> > > SearchPost(DTO.Input.SearchInput search) { Response <List <post> > response = new Response <List <post> >(); try { // post /knowledgebase/post/_search query=search.search Func <SearchDescriptor <post>, ISearchRequest> searchRequest = s => s. Index("knowledgebase"). Type(typeof(post).Name.ToLower()). Query(q => q.QueryString(qs => qs.Query(search.Query))); Tuple <long, List <post> > result = await _search.Search <post>(searchRequest); response.Data = result.Item2; response.PageIndex = search.PageIndex; response.PageSize = search.PageSize; response.TotalCount = (int)result.Item1; } catch (Exception ex) { response.Status = 0; response.Msg = ex.Message.ToString(); } return(response); }
public async Task <Response <IEnumerable <SearchOutput> > > IndexSuggestion(DTO.Input.SearchInput search) { Response <IEnumerable <SearchOutput> > response = new Response <IEnumerable <SearchOutput> >(); try { //new List<string>("".Split('.')) { "" }; List <string> sbudiler = new List <string>(); Func <SearchDescriptor <post>, ISearchRequest> request = req => req.Index <post>().Query(q => q.Match(m => m.Field(fd => fd.Locked).Query(search.Locked))). Source(sf => sf.Includes(f => f.Field(ff => ff.Tag).Field(ff => ff.Views))). Suggest(su => su.Completion("tag-suggestions", c => c.Prefix(search.Query).Field(p => p.Tag))); var result = await _search.SearchSuggest(request); var suggestions = result.Suggest["tag-suggestions"].FirstOrDefault(). Options.Select(suggest => new SearchOutput { suggesttag = suggest.Text }); response.Data = suggestions; } catch (Exception ex) { response.Status = 0; response.Msg = ex.Message.ToString(); } return(response); }
// by title or category or //score public async Task <Response <List <post> > > SearchPostbyField(DTO.Input.SearchInput search) { Response <List <post> > response = new Response <List <post> >(); try { // post /knowledgebase/post/_search query=search.search Func <SearchDescriptor <post>, ISearchRequest> request = s => s.Index("knowledgebase").Type(typeof(post).Name.ToLower()). Size(search.PageSize).From((search.PageIndex - 1) * search.PageSize). Query(q => q.Match(m => m.Field(p => p.Locked).Query(search.Locked)) && //Match(m => m // .Field(p => p.Category) // .Boost(1000) // .Query(search.Query) // ) || q /* .*/ q.FunctionScore(fs => fs .MaxBoost(50) .Functions(ff => ff .FieldValueFactor(fvf => fvf .Field(p => p.Views) .Factor(0.0001) ) ). Query(query => query.MultiMatch(m => m.Fields(f => f.Fields(p => p.Content, p => p.Title, p => p.Tag)). Query(search.Query))))); Tuple <long, List <post> > result = await _search.Search <post>(request); response.Data = result.Item2; response.PageIndex = search.PageIndex; response.PageSize = search.PageSize; response.TotalCount = (int)result.Item1; } catch (Exception ex) { response.Status = 0; response.Msg = ex.Message.ToString(); } return(response); }