Bird
Raised Fist0
Elasticsearchquery~10 mins

Relevance score (_score) in Elasticsearch - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Relevance score (_score)
Query sent to Elasticsearch
↓
Documents matched
↓
Calculate _score for each document
↓
Sort documents by _score descending
↓
Return sorted documents with _score
When you search, Elasticsearch finds matching documents, calculates a relevance score (_score) for each, sorts them by this score, and returns the results.
Execution Sample
Elasticsearch
{
  "query": {
    "match": { "text": "apple" }
  }
}
This query searches for documents containing the word 'apple' and Elasticsearch calculates a _score for each match.
Execution Table
StepActionDocuments Matched_score CalculationResult
1Receive query for 'apple'All documents checkedNo score yetPrepare to score matches
2Match documents containing 'apple'Doc1, Doc2, Doc3Calculate _score based on term frequency and other factorsScores assigned: Doc1=1.5, Doc2=2.3, Doc3=0.9
3Sort documents by _score descendingDoc2, Doc1, Doc3Sorting doneDoc2 highest relevance, Doc3 lowest
4Return sorted documents with _scoreDoc2, Doc1, Doc3Scores includedUser sees results ranked by relevance
💡 All matching documents scored and sorted; results returned to user.
Variable Tracker
VariableStartAfter Step 2After Step 3Final
Documents Matched[][Doc1, Doc2, Doc3][Doc1, Doc2, Doc3][Doc2, Doc1, Doc3]
_score{}{Doc1:1.5, Doc2:2.3, Doc3:0.9}{Doc1:1.5, Doc2:2.3, Doc3:0.9}{Doc2:2.3, Doc1:1.5, Doc3:0.9}
Key Moments - 2 Insights
Why does Doc2 have a higher _score than Doc1 even though both contain 'apple'?
Because _score depends on factors like how often 'apple' appears in the document and how rare the term is across all documents, as shown in step 2 of the execution_table.
Does a document with a higher _score always mean it contains more words from the query?
Not necessarily. _score also considers term rarity and field length, so a document with fewer but more important matches can have a higher _score, as seen in the scoring details in step 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the _score of Doc3 after step 2?
A2.3
B1.5
C0.9
D0
💡 Hint
Check the '_score Calculation' column in row for step 2.
At which step are the documents sorted by their _score?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look at the 'Action' column describing sorting in the execution_table.
If Doc1 had a higher term frequency for 'apple', how would the _score change in the variable_tracker?
ADoc1's _score would decrease after Step 2
BDoc1's _score would increase after Step 2
CDoc3's _score would increase after Step 2
DNo change in any _score
💡 Hint
Refer to the '_score' values in variable_tracker after Step 2.
Concept Snapshot
Relevance score (_score) in Elasticsearch:
- Calculated for each matching document
- Based on term frequency, rarity, and field length
- Higher _score means more relevant
- Results sorted by _score descending
- Returned with documents for ranking
Full Transcript
When you send a search query to Elasticsearch, it checks all documents to find matches. For each matching document, Elasticsearch calculates a relevance score called _score. This score depends on how often the search terms appear, how rare those terms are, and other factors. After scoring, Elasticsearch sorts the documents by their _score from highest to lowest. Finally, it returns the sorted documents along with their _score values so you see the most relevant results first.

Practice

(1/5)
1. What does the _score field represent in an Elasticsearch search result?
easy
A. The total number of documents in the index
B. The unique identifier of the document
C. The relevance score showing how well a document matches the query
D. The timestamp when the document was indexed

Solution

  1. Step 1: Understand the purpose of _score

    The _score is a numeric value assigned by Elasticsearch to each document based on how well it matches the search query.
  2. Step 2: Differentiate _score from other fields

    Unlike document ID or timestamps, _score specifically measures relevance, not identity or metadata.
  3. Final Answer:

    The relevance score showing how well a document matches the query -> Option C
  4. Quick Check:

    _score = relevance [OK]
Hint: Remember: _score means relevance, not ID or count [OK]
Common Mistakes:
  • Confusing _score with document ID
  • Thinking _score is a timestamp
  • Assuming _score counts documents
2. Which of the following is the correct way to access the _score in an Elasticsearch query response JSON?
easy
A. response.score
B. response._score
C. response.hits._score
D. response.hits.hits[0]._score

Solution

  1. Step 1: Understand Elasticsearch response structure

    Search results are inside hits.hits array, each element representing a document with its _score.
  2. Step 2: Identify correct path to _score

    The _score is a property of each hit object, so it is accessed as hits.hits[0]._score for the first result.
  3. Final Answer:

    response.hits.hits[0]._score -> Option D
  4. Quick Check:

    Access _score inside hits array [OK]
Hint: Remember: _score is inside each hit in hits.hits array [OK]
Common Mistakes:
  • Trying to access _score directly on response
  • Using hits._score which is invalid
  • Using response.score which does not exist
3. Given this Elasticsearch query snippet, which document will have the highest _score?
{
  "query": {
    "match": {
      "title": "apple banana"
    }
  }
}
Documents: 1. {"title": "apple banana fruit"} 2. {"title": "banana apple"} 3. {"title": "apple orange"} 4. {"title": "fruit banana apple"}
medium
A. Document 1
B. Document 2
C. Document 3
D. Document 4

Solution

  1. Step 1: Understand match query scoring

    Elasticsearch scores documents higher when query terms appear closer and in the same order in the field.
  2. Step 2: Compare documents for term order and presence

    Document 2 has "banana apple" which matches both terms but reversed order; Document 1 has "apple banana fruit" matching query order exactly; Document 4 has terms but with extra word; Document 3 misses "banana".
  3. Step 3: Consider term frequency and order

    Exact order and proximity increase score, so Document 1 scores highest because it matches "apple banana" exactly in order and proximity.
  4. Final Answer:

    Document 1 -> Option A
  5. Quick Check:

    Exact term order and proximity = highest _score [OK]
Hint: Exact term order and proximity boost _score [OK]
Common Mistakes:
  • Ignoring term order effect on score
  • Assuming all documents with terms score equally
  • Overlooking missing query terms in documents
4. You wrote this Elasticsearch query but all documents have _score equal to 1.0, which is unexpected:
{
  "query": {
    "match_all": {}
  }
}
What is the likely reason for this behavior?
medium
A. The match_all query assigns a constant _score of 1.0 to all documents
B. The index is empty so _score defaults to 1.0
C. You forgot to specify the field in the query
D. The _score is not returned by default

Solution

  1. Step 1: Understand match_all query behavior

    The match_all query matches every document equally and assigns a default _score of 1.0 to all.
  2. Step 2: Check if this matches the observed behavior

    Since all documents have _score 1.0, it confirms match_all is working as designed.
  3. Final Answer:

    The match_all query assigns a constant _score of 1.0 to all documents -> Option A
  4. Quick Check:

    match_all = constant _score 1.0 [OK]
Hint: match_all always gives _score 1.0 [OK]
Common Mistakes:
  • Thinking _score varies with match_all
  • Assuming missing field causes this
  • Believing _score is not returned by default
5. You want to boost documents that contain the word "premium" in the description field to increase their _score. Which Elasticsearch query correctly applies a boost to achieve this?
{
  "query": {
    "bool": {
      "should": [
        { "match": { "description": "premium" } },
        { "match": { "description": { "query": "premium", "boost": 2 } } }
      ]
    }
  }
}
hard
A. Use two match queries in should without boost
B. Use a single match with boost inside the field object
C. Use match_all with boost parameter
D. Use term query without boost

Solution

  1. Step 1: Understand boosting in Elasticsearch queries

    Boosting is done by adding a boost parameter inside the query clause to increase _score for matching documents.
  2. Step 2: Identify correct syntax for boosting

    The correct way is to use a single match query with boost inside the field object, like { "match": { "description": { "query": "premium", "boost": 2 } } }.
  3. Step 3: Evaluate given options

    Use a single match with boost inside the field object matches this syntax; other options either lack boost or use wrong query types.
  4. Final Answer:

    Use a single match with boost inside the field object -> Option B
  5. Quick Check:

    Boost inside match field object increases _score [OK]
Hint: Put boost inside match field object for scoring [OK]
Common Mistakes:
  • Using multiple matches without boost
  • Applying boost to match_all query
  • Using term query without boost
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard