Skip to main content

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,
SearchOperator @operator = SearchOperator.Or)
Parameters
fieldSelectorExpression<Func<TResult>>Points index field that should be used for querying.
searchTermsstringSpace separated terms e.g. 'John Adam' means that we will look in selected field for 'John' or 'Adam'. Wildcards can be specified.
boostdecimalBoost value. Default: 1.
optionsSearchOptionsExplicitly 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();

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();

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();

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.