Take the community feedback survey now.

Rajveer Singh
Jul 1, 2025
  433
(0 votes)

Boosting by published date with Relevance

Goal: To ensure that the latest published or last updated content is ranked higher in your search results, you can modify your query to include a boost based on recency. This typically involves boosting content based on a date field such as PublishedDate or LastUpdated.

Here’s how you can update your query to prioritize recent content while still considering relevance:

var result = query.ApplyBestBets()
    .BoostMatching(x => ((IContent)x).SearchTitle().MatchCaseInsensitive(contentFilter.SearchQuery), 1.5)
    .OrderByDescending(x => ((IContent)x).LastUpdated) // Boost by recency
    .Take(pageSize)
    .Skip((pageNo - 1) * pageSize)
    .StaticallyCacheFor(TimeSpan.FromSeconds(CacheSpan))
    .GetResult(hitSpec);

Explanation:

  • OrderByDescending(x => ((IContent)x).LastUpdated) ensures that the most recently updated content appears first.
  • If you want to balance relevance and recency, you might consider a custom scoring function or a composite boost that combines both.

 

------------

 

Also, we can implementing a more advanced scoring strategy that balances relevance and freshness as below:

To implement a balanced scoring strategy that considers both relevance and recency, you can use a custom boost function. This approach allows you to:

  • Boost content that matches the search query (relevance).
  • Boost content that is recently published or updated (recency).
  • Combine both into a composite score.

Here’s how you can update your query using a custom boost expression:

var result = query.ApplyBestBets()
    .BoostMatching(x => ((IContent)x).SearchTitle().MatchCaseInsensitive(contentFilter.SearchQuery), 1.5)
    .OrderByDescending(x => 
        ((IContent)x).SearchTitle().MatchCaseInsensitive(contentFilter.SearchQuery) ? 1 : 0 + 
        GetRecencyScore(((IContent)x).LastUpdated)
    )
    .Take(pageSize)
    .Skip((pageNo - 1) * pageSize)
    .StaticallyCacheFor(TimeSpan.FromSeconds(CacheSpan))
    .GetResult(hitSpec);

You’ll need to define GetRecencyScore like this:

private double GetRecencyScore(DateTime lastUpdated)
{
    var daysOld = (DateTime.UtcNow - lastUpdated).TotalDays;

    // Example scoring: newer content gets higher score
    if (daysOld <= 1) return 1.0;
    if (daysOld <= 7) return 0.8;
    if (daysOld <= 30) return 0.5;
    if (daysOld <= 90) return 0.3;
    return 0.1;
}

Why this works:

  • It gives a higher score to recent content, but still considers query match.
  • You can tune the weights in GetRecencyScore to fit your needs.




Jul 01, 2025

Comments

Please login to comment.
Latest blogs
Optimizely CMS Mixed Auth - Okta + ASP.NET Identity

Configuring mixed authentication and authorization in Optimizely CMS using Okta and ASP.NET Identity.

Damian Smutek | Oct 27, 2025 |

Optimizely: Multi-Step Form Creation Through Submission

I have been exploring Optimizely Forms recently and created a multi-step Customer Support Request Form with File Upload Functionality.  Let’s get...

Madhu | Oct 25, 2025 |

How to Add Multiple Authentication Providers to an Optimizely CMS 12 Site (Entra ID, Google, Facebook, and Local Identity)

Modern websites often need to let users sign in with their corporate account (Entra ID), their social identity (Google, Facebook), or a simple...

Francisco Quintanilla | Oct 22, 2025 |

Connecting the Dots Between Research and Specification to Implementation using NotebookLM

Overview As part of my day to day role as a solution architect I overlap with many clients, partners, solutions and technologies. I am often...

Scott Reed | Oct 22, 2025