private IRavenQueryable <Apps_Search2.Result> BoostMethod(IRavenQueryable <Apps_Search2.Result> q) { var boosted = DocumentSession.Load <BoostedResults>("options/boostedResults"); if (boosted != null) { // Boost by developer if (boosted.Developers.Any()) { var boostDevelopersQuery = "* " + string.Join(" ", boosted.Developers.Select( x => "\"" + x.Criteria + "\"^" + x.Value)); q = q.Search(x => x.Developer, boostDevelopersQuery, 1, SearchOptions.And, EscapeQueryOptions.RawQuery); } // Boost by language if (boosted.Languages.Any()) { var boostedLanguagesQuery = "* " + string.Join(" ", boosted.Languages.Select( x => "\"" + x.Criteria + "\"^" + x.Value)); q = q.Search(x => x.Language, boostedLanguagesQuery, 1, SearchOptions.And, EscapeQueryOptions.RawQuery); } // Boost by specific apps if (boosted.Apps.Any()) { var boostedAppsQuery = "* " + string.Join(" ", boosted.Apps.Select(x => "\"" + x.Criteria + "\"^" + x.Value)); q = q.Search(x => x.AppId, boostedAppsQuery, 1, SearchOptions.And, EscapeQueryOptions.RawQuery); } } return(q); }
public virtual async Task <IRavenQueryable <M> > Init(IRavenQueryable <M> query, PagedFilter filter, string favKey) { Favs = await Session.Query <FavMaster, FavFanIndex>() .Where(c => c.UserId == CurrentUser.Id && c.FilterKey == favKey).ToListAsync(); if (filter.FavouriteRestrict) { query = query.Where(c => c.Id.In(Favs.Select(f => f.Id))); } if (!string.IsNullOrEmpty(filter.Search)) { query = query.Search(c => c.Searchable, $"*{filter.Search}*", options: SearchOptions.And); } return(query); }
public static IRavenQueryable <T> QueryMultipleWords <T>(this IRavenQueryable <T> query, Expression <Func <T, object> > fieldSelector, string queryString, SearchOptions options = SearchOptions.And) { if (string.IsNullOrWhiteSpace(queryString)) { return(query); } queryString = queryString.Trim().Replace(" ", "* AND ").Replace(",", "* AND "); if (!queryString.EndsWith("*")) { queryString = queryString + "*"; } var result = query.Search(fieldSelector, queryString, options: options, escapeQueryOptions: EscapeQueryOptions.AllowAllWildcards); return(result); }
protected IRavenQueryable <T> ApplySearch <T>(IRavenQueryable <T> query, Expression <Func <T, object?> > fieldExpression, string?search) { if (string.IsNullOrWhiteSpace(search)) { return(query); } search = search.Trim(); // Generate a search string for just beginning of the words. // E.g. "David Smith-Lowe" becomes "David* Smith-Lowe*" string searchWildCards = Regex.Replace(search + " ", @"[\s,;:""{}[]|\\/`~!@#$%^&*()_=\+]+", "* ").Trim(); IsSearchResult = true; // boost exact matches more so they are displayed first return(query .Search(fieldExpression, search.ToLower(), boost: 1000M) .Search(fieldExpression, searchWildCards.ToLower(), boost: 800M)); }