🗓️ 04102025 0040

ELASTICSEARCH SCORING & RELEVANCE

How Elasticsearch ranks search results by relevance.

Core Concepts​

Relevance Score​

Every search result gets a score indicating how well it matches the query. Higher score = more relevant.

What Affects Scoring?​

FactorImpact
Term frequencyHow often search term appears in document
Document frequencyHow common the term is across all documents (rare terms score higher)
Field lengthShorter fields score higher for same match
Boost valuesManual weight adjustments

Scoring vs Non-Scoring​

Queries that Affect Score​

  • must (in bool query) - Required AND scores
  • should (in bool query) - Optional OR boosts score
  • match, multi_match - Full-text search with scoring
  • function_score - Custom scoring functions

Queries that Don't Affect Score​

  • filter (in bool query) - Yes/no match, no scoring (faster!)
  • term, terms - Exact match, typically in filters
  • Any query in filter context - Cached, binary yes/no

Rule of thumb: Use must for search, filter for filtering. Filters are faster because they skip scoring and cache results.

Boosting Strategies​

Field Boosting​

Make certain fields more important than others.

  • Example: title^3 means title matches are 3x more valuable than other fields
  • Use in multi_match to prioritize fields

Document Boosting​

Boost entire documents based on metadata.

  • function_score: Custom scoring functions
  • field_value_factor: Boost by numeric field (e.g., popularity, rating)
  • decay functions: Boost by proximity (date, location, numeric value)

Query Boosting​

Adjust importance of different query clauses.

  • Use in bool queries: give some should clauses higher weight
  • Boost specific terms within a query

Common Patterns​

Search with Filters (Optimal)​

  • Use must for search terms (scored)
  • Use filter for constraints (not scored, cached)
  • Result: Fast filtering + relevant scoring

Use function_score with field_value_factor to boost by popularity, rating, or recency.

Multi-Field Search with Priorities​

Use multi_match with field boosting to make titles more important than descriptions.

Scoring Debugging​

View Scores​

Add "explain": true to query to see why documents scored the way they did.

Disable Scoring​

Use constant_score to wrap queries when you don't need scoring (all results get score of 1.0).


References​