Synonym handling in Elasticsearch - Time & Space Complexity
When Elasticsearch processes synonyms, it changes how many words it looks at during a search.
We want to know how adding synonyms affects the work Elasticsearch does as the input grows.
Analyze the time complexity of the following synonym filter in Elasticsearch.
{
"settings": {
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms": ["quick,fast", "jumps,leaps"]
}
},
"analyzer": {
"synonym_analyzer": {
"tokenizer": "standard",
"filter": ["lowercase", "synonym_filter"]
}
}
}
}
}
This code defines a synonym filter that replaces words with their synonyms during analysis.
Look at what repeats when analyzing text with synonyms.
- Primary operation: For each token (word), check if it matches any synonym group.
- How many times: Once per token in the input text.
As the number of words (tokens) grows, the synonym filter checks each one against the synonym list.
| Input Size (n tokens) | Approx. Operations |
|---|---|
| 10 | 10 synonym checks |
| 100 | 100 synonym checks |
| 1000 | 1000 synonym checks |
Pattern observation: The work grows directly with the number of tokens; more words mean more checks.
Time Complexity: O(n)
This means the time to process synonyms grows in a straight line with the number of words analyzed.
[X] Wrong: "Adding synonyms makes the search time explode exponentially."
[OK] Correct: Actually, each word is checked once against the synonym list, so time grows linearly, not exponentially.
Understanding how synonym handling scales helps you explain search performance clearly and confidently.
What if the synonym list grew from 10 to 10,000 entries? How would that affect the time complexity?
Practice
Solution
Step 1: Understand synonym handling concept
Synonym handling allows Elasticsearch to match words that mean the same, improving search results.Step 2: Identify the main goal
The goal is to find results with different words but same meaning, not speed or encryption.Final Answer:
To find search results that include different words with the same meaning -> Option AQuick Check:
Synonym handling = find similar meaning words [OK]
- Thinking synonyms speed up indexing
- Confusing synonyms with encryption
- Assuming synonyms translate languages automatically
Solution
Step 1: Identify correct filter type for synonyms
The filter type for synonyms must be "synonym" to handle synonym lists.Step 2: Check the filter definition syntax
"filter": { "synonym_filter": { "type": "synonym", "synonyms": ["quick,fast"] } } correctly uses "type": "synonym" and defines synonyms as a list.Final Answer:
"filter": { "synonym_filter": { "type": "synonym", "synonyms": ["quick,fast"] } } -> Option CQuick Check:
Synonym filter type = "synonym" [OK]
- Using wrong filter types like stop or stemmer
- Not defining synonyms as a list
- Misspelling "synonym" type
"fast car"?
{
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms": ["fast,quick"]
}
},
"analyzer": {
"synonym_analyzer": {
"tokenizer": "standard",
"filter": ["lowercase", "synonym_filter"]
}
}
}
}Solution
Step 1: Analyze the text with the synonym filter
The synonym filter maps "fast" to "quick", so both tokens appear for "fast".Step 2: List all tokens after analysis
Tokens are "fast", "quick" (synonym), and "car" (unchanged).Final Answer:
["fast", "quick", "car"] -> Option BQuick Check:
Synonym adds "quick" token for "fast" [OK]
- Ignoring synonym addition and listing only original tokens
- Replacing original token instead of adding synonym
- Duplicating tokens unnecessarily
Solution
Step 1: Understand how synonym filters affect search
Synonyms must be applied in the analyzer used during search to affect results.Step 2: Identify common setup mistake
Often synonyms are applied only at index time, missing search analyzer usage.Final Answer:
You used the synonym filter in the index but not in the search analyzer -> Option AQuick Check:
Synonyms must be in search analyzer too [OK]
- Adding synonym filter only at index time
- Not including synonym filter in search analyzer
- Misconfiguring synonyms as string instead of list
Solution
Step 1: Define all related terms as synonyms
Include "tv", "television", and "smart tv" together to cover all user queries.Step 2: Apply synonym filter in both index and search analyzers
This ensures synonyms work during indexing and searching for best results.Final Answer:
Define synonyms as: "tv, television, smart tv" in a synonym filter and apply it in both index and search analyzers -> Option DQuick Check:
Synonyms cover all terms and apply at both stages [OK]
- Ignoring multi-word synonyms like "smart tv"
- Applying synonyms only at search time
- Using stop filter incorrectly to remove words
Ready to prove it?
Pass the test and this pattern moves unknown
