Token filters change words in text to help search work better. They make words lowercase, find word roots, or add similar words.
Token filters (lowercase, stemmer, synonym) in Elasticsearch
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"my_lowercase": {
"type": "lowercase"
},
"my_stemmer": {
"type": "stemmer",
"language": "english"
},
"my_synonym": {
"type": "synonym",
"synonyms": [
"car, automobile",
"quick, fast"
]
}
},
"analyzer": {
"my_custom_analyzer": {
"tokenizer": "standard",
"filter": ["my_lowercase", "my_stemmer", "my_synonym"]
}
}
}
}
}The lowercase filter makes all words small letters.
The stemmer filter cuts words to their root form.
The synonym filter adds words that mean the same.
"filter": { "lowercase_filter": { "type": "lowercase" } }
"filter": { "english_stemmer": { "type": "stemmer", "language": "english" } }
"filter": { "synonym_filter": { "type": "synonym", "synonyms": ["fast, quick", "car, automobile"] } }
This example creates an index with lowercase, stemmer, and synonym filters. Then it analyzes the text 'Cars are running fast' to show how tokens change.
PUT /example_index
{
"settings": {
"analysis": {
"filter": {
"lowercase_filter": {
"type": "lowercase"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"synonym_filter": {
"type": "synonym",
"synonyms": ["car, automobile", "fast, quick"]
}
},
"analyzer": {
"custom_analyzer": {
"tokenizer": "standard",
"filter": ["lowercase_filter", "english_stemmer", "synonym_filter"]
}
}
}
}
}
GET /example_index/_analyze
{
"analyzer": "custom_analyzer",
"text": "Cars are running fast"
}Order of filters matters: lowercase should come before stemmer and synonym.
Synonym filter can use external files for large synonym lists.
Stemming may reduce words too much, so test your filters carefully.
Token filters change words to improve search matching.
Lowercase filter makes all words small letters.
Stemmer filter finds root forms of words.
Synonym filter adds similar words to search.
Practice
What does the lowercase token filter do in Elasticsearch?
Solution
Step 1: Understand the lowercase filter purpose
The lowercase filter changes all tokens to lowercase to make searches case-insensitive.Step 2: Compare with other filters
Stemmer finds root words, synonym adds similar words, stop word filter removes common words. Only lowercase converts to lowercase.Final Answer:
Converts all tokens to lowercase letters -> Option AQuick Check:
Lowercase filter = converts tokens to lowercase [OK]
- Confusing lowercase with stemmer
- Thinking lowercase adds synonyms
- Mixing lowercase with stop word removal
Which of the following is the correct syntax to define a synonym token filter in Elasticsearch?
{
"filter": {
"my_synonym": {
"type": "synonym",
"synonyms": ["quick,fast"]
}
}
}Solution
Step 1: Identify the token filter type for synonyms
The synonym filter must have "type": "synonym" to work correctly.Step 2: Check the synonyms property
The synonyms list is correctly provided as an array of strings with comma-separated words.Final Answer:
{ "type": "synonym", "synonyms": ["quick,fast"] } -> Option CQuick Check:
Synonym filter syntax = type synonym with synonyms list [OK]
- Using wrong type like stemmer or lowercase
- Not providing synonyms as an array
- Misspelling 'synonym' in type
Given this analyzer configuration in Elasticsearch:
{
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": ["lowercase", "porter_stem"]
}
}
}What will be the output tokens for the input text "Running Runs"?
Solution
Step 1: Apply lowercase filter
Input "Running Runs" becomes "running runs" after lowercase filter.Step 2: Apply porter_stem filter
Porter stemmer reduces "running" and "runs" to root "run" for both tokens.Final Answer:
["run", "run"] -> Option DQuick Check:
Lowercase + stemmer = root forms in lowercase [OK]
- Ignoring stemming effect
- Not applying lowercase first
- Expecting original case tokens
Identify the error in this token filter definition:
{
"filter": {
"my_stemmer": {
"type": "stemmer",
"language": "englishy"
}
}
}Solution
Step 1: Check the "language" parameter spelling
The language "englishy" is incorrect; the correct value is "english".Step 2: Verify the stemmer type and parameters
Type "stemmer" is correct; no synonyms needed here; filter can be defined outside analyzer.Final Answer:
"language" value is misspelled; should be "english" -> Option BQuick Check:
Stemmer language spelling must be exact [OK]
- Using invalid language names
- Confusing stemmer with synonym filter
- Expecting synonyms in stemmer filter
You want to create an analyzer that makes searches case-insensitive, finds root forms of words, and also matches synonyms like "fast" for "quick". Which token filters should you include in your analyzer?
Solution
Step 1: Identify filters for case-insensitivity and root forms
Lowercase filter makes tokens lowercase; stemmer finds root forms.Step 2: Add synonym filter for matching similar words
Synonym filter adds synonyms like "fast" for "quick" to improve matching.Final Answer:
["lowercase", "stemmer", "synonym"] -> Option AQuick Check:
Lowercase + stemmer + synonym = case-insensitive, root, and synonym matching [OK]
- Omitting stemmer or synonym filters
- Using stop filter instead of stemmer
- Not including lowercase for case-insensitivity
Ready to prove it?
Pass the test and this pattern moves unknown
