Session: Querying: How to Use Search
More complex text searching can be achieved by using the Search
extension method. This method allows you to pass one or more search terms that will be used in the searching process for a particular field (or fields).
Syntax
IRavenQueryable<T> Search<T>(
Expression<Func<T, object>> fieldSelector,
string searchTerms,
decimal boost = 1,
SearchOptions options = SearchOptions.Guess)
Parameters | ||
---|---|---|
fieldSelector | Expression<Func<TResult>> | Points index field that should be used for querying. |
searchTerms | string | Space separated terms e.g. 'John Adam' means that we will look in selected field for 'John' or 'Adam'. Wildcards can be specified. |
boost | decimal | Boost value. Default: 1 . |
options | SearchOptions | Explicitly set relation between each Search function. One of the following: Or , And , Not , Guess . Default: SearchOptions.Guess . |
Example I - Dynamic Query
List<User> users = session
.Query<User>()
.Search(u => u.Name, "a*")
.ToList();
List<User> users = await asyncSession
.Query<User>()
.Search(u => u.Name, "a*")
.ToListAsync();
from Users
where search(Name, 'a*')
Example II - Query Using Static Index
List<User> users = session
.Query<User, Users_ByNameAndHobbies>()
.Search(x => x.Name, "Adam")
.Search(x => x.Hobbies, "sport")
.ToList();
List<User> users = await asyncSession
.Query<User, Users_ByNameAndHobbies>()
.Search(x => x.Name, "Adam")
.Search(x => x.Hobbies, "sport")
.ToListAsync();
from index 'Users/ByNameAndHobbies'
where search(Name, 'Adam') or search(Hobbies, 'sport')
Example III - Boosting Usage
List<User> users = session
.Query<User>("Users/ByHobbies")
.Search(x => x.Hobbies, "I love sport", boost: 10)
.Search(x => x.Hobbies, "but also like reading books", boost: 5)
.ToList();
List<User> users = await asyncSession
.Query<User>("Users/ByHobbies")
.Search(x => x.Hobbies, "I love sport", boost: 10)
.Search(x => x.Hobbies, "but also like reading books", boost: 5)
.ToListAsync();
from index 'Users/ByHobbies'
where boost(search(Hobbies, 'I love sport'), 10) or boost(search(Hobbies, 'but also like reading books'), 5)
Note
To leverage the searching capabilities with the usage of static indexes, please remember to enable full-text search in field settings of the index definition.