Rajveer Singh
Jul 1, 2025
  593
(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
Graph access with only JS and Fetch

Postman is a popular tool for testing APIs. However, when testing an API like Optimizely Graph that I will be consuming in the front-end I prefer t...

Daniel Halse | Feb 4, 2026

Best Practices for Implementing Optimizely SaaS CMS: A Collective Wisdom Guide

This guide compiles collective insights and recommendations from Optimizely experts for implementing Optimizely SaaS CMS, focusing on achieving...

David Knipe | Feb 4, 2026 |

A day in the life of an Optimizely OMVP: Learning Optimizely Just Got Easier: Introducing the Optimizely Learning Centre

On the back of my last post about the Opti Graph Learning Centre, I am now happy to announce a revamped interactive learning platform that makes...

Graham Carr | Jan 31, 2026

Scheduled job for deleting content types and all related content

In my previous blog post which was about getting an overview of your sites content https://world.optimizely.com/blogs/Per-Nergard/Dates/2026/1/sche...

Per Nergård (MVP) | Jan 30, 2026