Boost Search Results


  • When querying with some filtering conditions,
    a basic score is calculated for each document in the results by the underlying engine.

  • Providing a boost value to some fields allows you to prioritize the resulting documents.
    The boost value is integrated with the basic score, making the document rank higher.

  • Boosting can be achieved in the following ways:

    • At query time:
      Apply a boost factor to searched terms at query time - as described in this article.

    • Via index definition:
      Apply a boost factor in your index definition - see this boosting indexing article.

  • The automatic ordering of the results by the score is configurable.
    Learn more here: automatic score-based ordering

  • The calculated score details of the results can be retrieved if needed.
    Learn more here: get resulting score

  • In this page:


To apply boosting while running a full-text search, use the boost() method to prioritize the preceding search() results.

/** @var array<Employee> $employees */
$employees = $session
    // Make a dynamic full-text search Query on 'Employees' collection
    ->query(Employee::class)
    // This search predicate will use the default boost value of 1
    ->search("Notes", "English")
    // * This search predicate will use a boost value of 10
    ->search("Notes", "Italian")
    // Call 'boost()' to set the boost value of the previous 'search()' call
    ->boost(10)
    ->toList();

// * Results will contain all Employee documents that have
//   EITHER 'English' OR 'Italian' in their 'Notes' field (case-insensitive).
//
// * Matching documents that contain 'Italian' will get a HIGHER score
//   than those that contain 'English'.
//
// * Unless configured otherwise, the resulting documents will be ordered by their score.
List<Employee> employees = session.Advanced
     // Make a dynamic full-text search DocumentQuery on 'Employees' collection
    .DocumentQuery<Employee>()
     // This search predicate will use the default boost value of 1
    .Search(x => x.Notes, "English")
     // This search predicate will use a boost value of 10 
    .Search(x => x.Notes, "Italian")
     // Call 'Boost' to set the boost value of the previous 'Search' call
    .Boost(10)
    .ToList();

// * Results will contain all Employee documents that have
//   EITHER 'English' OR 'Italian' in their 'Notes' field (case-insensitive).
//
// * Matching documents that contain 'Italian' will get a HIGHER score
//   than those that contain 'English'.
//
// * Unless configured otherwise, the resulting documents will be ordered by their score.  
from "Employees" where
search(Notes, "English") or boost(search(Notes, "Italian"), 10)

Boost results - when querying with where clause

boost() can be used to give different priorities to the results returned by different where clauses.

/** @var array<Company> $companies */
$companies = $session->advanced()
    // Make a dynamic DocumentQuery on 'Companies' collection
    ->documentQuery(Company::class)
    // Define a 'Where' condition
    ->WhereStartsWith("Name", "O")
    // Call 'Boost' to set the boost value of the previous 'Where' predicate
    ->boost(10)
    // Call 'OrElse' so that OR operator will be used between statements
    ->orElse()
    ->whereStartsWith("Name", "P")
    ->boost(50)
    ->orElse()
    ->whereEndsWith("Name", "OP")
    ->boost(90)
    ->toList();

// * Results will contain all Company documents that either
//   (start-with 'O') OR (start-with 'P') OR (end-with 'OP') in their 'Name' field (case-insensitive).
//
// * Matching documents that end-with 'OP' will get the HIGHEST scores.
//   Matching documents that start-with 'O' will get the LOWEST scores.
//
// * Unless configured otherwise, the resulting documents will be ordered by their score.
from "Companies" where
boost(startsWith(Name, "O"), 10) or
boost(startsWith(Name, "P"), 50) or
boost(endsWith(Name, "OP"), 90)