With Sitecore’s Search API, boosting by date range may seem like a simple a straightforward thing to do. Well, it is if you choose the right (or, rather, suggested) way to do it.
Let’s start with the way in which it will not work:
dateBoostPredicate = dateBoostPredicate.Or(x => x.PublishDate >= start && x.PublishDate < end).Boost(10);
This results in the following query to Lucene (obtained from Sitecore’s search log):
(+publish_date:[20161202t214020466z TO *] +publish_date:[* TO 20170302t214020466z})
As you can see above, the boost at the end of the condition was not added. Essentially, I was expecting it to look something like this:
(+publish_date:[20161202t214020466z TO *] +publish_date:[* TO 20170302t214020466z})^10
After decompiling Sitecore’s DLLs and learning that boosting was not implemented for this particular wildcard query, I reached out to Sitecore support, who pointed me in the right direction. Voila, welcome the “between” extension method. So, I modified my query as follows:
dateBoostPredicate = dateBoostPredicate.Or(x => (x.PublishDate.Between(start, end, Inclusion.Lower)).Boost(10));
And the resulting query issued to Lucene was:
publish_date:[20161202t214020466z TO 20170302t214020466z]^10.0
Perfect! Using the “between” extension method definitely seems obvious after seeing the solution, but it wasn’t when I first attempted the boost. In any case, hope that someone finds this useful someday. A special thanks to Sitecore Support for the assist!