Area: Optimizely Search & Navigation
Applies to versions: 12 and higher
Other versions:


Recommended reading 

Use filters to narrow down search results, or use them for database-like queries. This topic explains how to filter search results based on date/time fields, using the Filter method in Optimizely Search & Navigation. 

How it works

Use the Filter method to filter DateTime and nullable DateTime fields in a number of ways. The following list shows use cases and examples illustrating the available methods.

Note: If you cache the search results using the built in caching functionality, you probably do not want to use DateTime.Now in your filters, because the cache key will differ for each search. In those cases, instead, normalize the DateTime value to the closest minute or, at the very least, second.


To search for documents where a DateTime field has a value, use the Exists method. The following search finds blog posts with a PublishDate property with a value. The following code is similar to the LINQ query Where(x => x.PublishDate.HasValue).

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

To negate it with an exclamation mark (!) to find all blog posts with no publish date, use the code below.

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

Exact match

For exact matching, use the Match method. The following search matches blog posts published exactly at 2010-01-01 00:00. It does not match those published 2009-12-31, 2010-01-01 01:00 or 2010-01-02. The LINQ equivalent is Where(x => x.PublishDate == new DateTime(2010, 1, 1)).

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.PublishDate.Match(new DateTime(2010, 1, 1)));

Matching by range

To find documents with a DateTime field whose value is within a given range, use the InRange method. The following search matches blog posts that were published between 2010-01-01 00:00 and 2010-01-02 00:00. An equivalent in LINQ is Where(x => x.PublishDate >= new DateTime(2010, 1, 1) && x.PublishDate <= new DateTime(2010, 1, 2)).

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.PublishDate.InRange(new DateTime(2010, 1, 1), new DateTime(2010, 1, 2)));

For convenience, the .NET API also features the GreaterThan, LessThan, Before,and After methods that make range filtering easier for DateTime fields.

Do you find this information helpful? Please log in to provide feedback.

Last updated: Oct 31, 2016

Recommended reading