Loading...
Area: Episerver Search & Navigation
Applies to versions: 12 and higher
Other versions:

Strings

Recommendations [hide]

Use filters to narrow down search results, or use them for database-like queries. This topic explains how to filter search results based on strings, with the Filter method in Episerver Search & Navigation (formerly Episerver Find). 

How it works

Use the Filter method to filter string fields in several ways. Below are use cases and examples illustrating the methods.

Existence

To search for documents where a string field has a value, use the Exists method. The following search finds blog posts that have a title. The following code is similar to the LINQ query Where(x => x.Title != null).

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Title.Exists());

Like all filters, it can be negated using an exclamation mark (!). For xeample, to find all blog posts that lack a title, use the following code.

var searchQuery = client.Search<BlogPost>()
  .Filter(x => !x.Title.Exists());

Exact match

For exact matching, use the Match method. The following search matches blog posts titled Find but not those titled find, fInd, Find rocks! or  Hello Find. The LINQ equivalent is Where(x => x.Title == Find).

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Title.Match("Find"));

Case insensitive match

For exact matching without regard to case, use the MatchCaseInsensitive method. The following search matches blog posts titled Find, find and fInd but not those titled Find rocks! or Hello Find. The following search is similar to the LINQ query Where(x => x.Title.ToLower() == Find.ToLower()).

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Title.MatchCaseInsensitive("Find"));

Matching by beginning of a string (startsWith)

The Prefix method lets you match by the beginning of a string. The following search matches blog posts titled Find and Find rocks! but not find, Finding or Hello Find.

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Title.Prefix("Find"));

Use the PrefixCaseInsensitive method to match by the beginning of a string in a case-insensitive way. The following search matches blog posts titled Find, Find rocks! and Find but not Finding or Hello Find.

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Title.PrefixCaseInsensitive("Find"));

Matching by beginning of any word (wildcard, autocomplete)

In some situations, such as when building autocomplete or search-as-you-type functionality, you want to filter on whether any word in a string starts with a certain string. Achieve this with the AnyWordBeginsWith method.

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Title.AnyWordBeginsWith("Ban"));

The above query matches blog posts titled Banana, banana, Banana split or Yellow bananas. It does not match blog posts titled Abandon, because no word in that title starts with ban (although it contains those characters).

Note: While the Match and Prefix methods are case-sensitive and have case-insensitive counterparts, the AnyWordBeginsWith method is not case-sensitive and has no case-sensitive counterpart.

Matching by range

The InRange method lets you filter on string fields that match a specific range. For instance, the following search matches blog posts titled A, Aa, and B but not those titled Bb or C.

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Title.InRange("A", "B"));

Matching by a set of values

The In method filters on string fields that match an explicit list of values. For instance, the following search matches blog entries titled A, B and C.

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Title.In(new List<string> { "A", "B", "C" }));

Filtering on string collections

You also can use the Exists, Match, In and MatchCaseInsensitive methods for properties that implement IEnumerable<string>. The following search uses Exists and matches blog posts that have at least one tag.

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Tags.Exists());

The following search matches any blog post that has the tag Find. It does not limit the results to only blog posts tagged with Find.

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.Tags.Match("Find"));
Do you find this information helpful? Please log in to provide feedback.

Last updated: Oct 31, 2016

Recommendations [hide]