DEV Community

franky joy
franky joy

Posted on • Edited on

Enhancing Relevance: Rank-Based Search in Elasticsearch

Implementing Rank-Based Search in Elasticsearch

  1. Introduction
    This white paper provides a detailed guide on implementing rank-based search in Elasticsearch. Elasticsearch is a powerful search engine that supports both full-text search and custom ranking strategies. We cover the native scoring mechanism, as well as custom ranking using fields like popularity, rating, or other metrics.

  2. Basic Ranked Search in Elasticsearch
    Elasticsearch uses the BM25 algorithm by default for scoring full-text queries. A basic match query returns documents ranked by their relevance to the search term.
    Example:

GET /products/_search
{
  "query": {
    "match": {
      "title": "wireless headphones"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode
  1. Custom Ranking and Boosting You can boost search scores based on custom fields such as popularity, rating, or sales. 3.1 Function Score Query Use the function_score query to modify the relevance score using field values. Example:
GET /products/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "title": "wireless headphones"
        }
      },
      "field_value_factor": {
        "field": "popularity",
        "factor": 1.5,
        "modifier": "log1p",
        "missing": 1
      },
      "boost_mode": "multiply"
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

3.2 Scripted Scoring (Advanced)
Use scripted scoring for complex ranking logic involving multiple fields.
Example:


GET /products/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "description": "wireless headphones"
        }
      },
      "script_score": {
        "script": {
          "source": "(doc['rating'].value * 2) + (doc['sales'].value / 10)"
        }
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

3.3 Sorting by Rank Field
To sort results strictly by a predefined rank field:
Example:

GET /products/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    { "rank": "asc" }
  ]
}
Enter fullscreen mode Exit fullscreen mode
  1. Optimization Tips
  • Index rank fields as float or integer.
  • Use norms: false on irrelevant fields to save space.
  • Combine text relevance with numeric ranks for better user experience.
  • Use Rank Feature fields for learning-to-rank use cases.

Top comments (0)