Rajveer Singh
Jul 1, 2025
  607
(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
We Cloned Our Best Analyst with AI: How Our Opal Hackathon Grand Prize Winner is Changing Experimentation

Every experimentation team knows the feeling. You have a backlog of experiment ideas, but progress is bottlenecked by one critical team member, the...

Polly Walton | Feb 16, 2026

Architecting AI in Optimizely CMS: When to Use Opal vs Custom Integration

AI is rapidly becoming a core capability in modern digital experience platforms. As developers working with Optimizely CMS 12 (.NET Core), the real...

Keshav Dave | Feb 15, 2026

Reducing Web Experimentation MAU Using the REST API

Overview Optimizely Web Experimentation counts an MAU based upon the script snippet rendering for evauluation of web experiement. Therefore when yo...

Scott Reed | Feb 13, 2026

Install the new AI Assistant Chat for Optimizely

AI Assistant Chat is a revolutionary feature introduced in version 3.0 of Epicweb.Optimizely.AIAssistant that brings conversational AI directly int...

Luc Gosso (MVP) | Feb 12, 2026 |