📖 Scenario: You are building a search feature for a bookstore website. You want users to get suggestions as they type book titles.
🎯 Goal: Create an Elasticsearch index with edge n-gram analyzer to enable autocomplete suggestions on book titles.
📋 What You'll Learn
Create an index called books with edge n-gram analyzer
Add a title field using the edge n-gram analyzer
Index sample book documents with exact titles
Query the index to get autocomplete suggestions for a given prefix
💡 Why This Matters
🌍 Real World
Autocomplete helps users find books quickly by suggesting titles as they type, improving user experience on bookstore websites.
💼 Career
Understanding edge n-gram analyzers and autocomplete queries is useful for search engineers and backend developers working with Elasticsearch.
Progress0 / 4 steps
1
Create the books index with edge n-gram analyzer
Write a JSON request to create an Elasticsearch index called books with a custom analyzer named autocomplete that uses an edge_ngram tokenizer with min_gram 1 and max_gram 10. Define a title field of type text that uses this analyzer for indexing and a standard analyzer for searching.
Elasticsearch
Hint
Define the settings.analysis.analyzer.autocomplete with the edge_ngram_tokenizer. Then map the title field to use this analyzer.
2
Index sample book documents
Index three book documents into the books index with the exact title values: "The Great Gatsby", "Gone with the Wind", and "Great Expectations".
Elasticsearch
Hint
Use POST /books/_doc/<id> to add each book with the exact title.
3
Write the autocomplete query
Write a JSON query to search the books index for autocomplete suggestions on the title field using a match query with the prefix "Gre".
Elasticsearch
Hint
Use a match query on the title field with the value "Gre" to get autocomplete results.
4
Display the autocomplete results
Print the titles of the books returned by the autocomplete query for the prefix "Gre". Assume the query result is stored in a variable called response and print each matching _source.title on a new line.
Elasticsearch
Hint
Loop over response["hits"]["hits"] and print each _source.title.
Practice
(1/5)
1. What is the main purpose of using an edge_ngram tokenizer in Elasticsearch autocomplete?
easy
A. To break words into prefixes for fast autocomplete suggestions
B. To sort search results alphabetically
C. To remove stop words from the search query
D. To index only complete words without partial matches
Solution
Step 1: Understand edge n-gram tokenizer function
The edge n-gram tokenizer splits words into prefixes, like 'app', 'appl', 'apple' for 'apple'.
Step 2: Relate tokenizer to autocomplete
This prefix splitting allows Elasticsearch to quickly suggest words as users type partial input.
Final Answer:
To break words into prefixes for fast autocomplete suggestions -> Option A
Quick Check:
edge_ngram tokenizer = prefix splitting [OK]
Hint: Edge n-gram creates prefixes for autocomplete speed [OK]
Common Mistakes:
Thinking edge n-gram sorts results
Confusing with stop word removal
Assuming it indexes only full words
2. Which of the following is the correct way to define an edge_ngram tokenizer in Elasticsearch settings?
Hint: Look for type 'edge_ngram' with min_gram and max_gram [OK]
Common Mistakes:
Using 'standard' type instead of 'edge_ngram'
Defining edge_ngram under analyzer instead of tokenizer
Confusing ngram with edge_ngram tokenizer
3. Given this analyzer configuration using edge n-gram tokenizer:
{ "settings": { "analysis": { "tokenizer": { "autocomplete_tokenizer": { "type": "edge_ngram", "min_gram": 1, "max_gram": 3, "token_chars": ["letter"] } }, "analyzer": { "autocomplete": { "type": "custom", "tokenizer": "autocomplete_tokenizer", "filter": ["lowercase"] } } } }}
What tokens will be generated for the word "cat" during indexing?
medium
A. ["cat"]
B. ["c", "a", "t"]
C. ["ca", "cat", "cat"]
D. ["c", "ca", "cat"]
Solution
Step 1: Understand edge n-gram tokenizer with min_gram=1 and max_gram=3
It creates tokens from the start of the word with lengths 1 to 3 letters.
Step 2: Generate tokens for 'cat'
Tokens are 'c' (1 letter), 'ca' (2 letters), and 'cat' (3 letters).
Final Answer:
["c", "ca", "cat"] -> Option D
Quick Check:
edge n-gram tokens for 'cat' = ["c", "ca", "cat"] [OK]
Hint: Edge n-gram tokens start from first letter up to max_gram [OK]
Common Mistakes:
Assuming only full word token is generated
Including tokens from middle or end of word
Confusing n-gram with edge n-gram tokens
4. You have this analyzer configuration for autocomplete but your search results do not return expected matches:
{ "settings": { "analysis": { "tokenizer": { "autocomplete_tokenizer": { "type": "edge_ngram", "min_gram": 2, "max_gram": 5 } }, "analyzer": { "autocomplete": { "type": "custom", "tokenizer": "autocomplete_tokenizer", "filter": ["lowercase"] }, "search_analyzer": { "type": "standard" } } } }}
What is the likely cause of the problem?
medium
A. The tokenizer type should be 'ngram' not 'edge_ngram'
B. The search analyzer is incorrectly defined as 'standard' instead of using the same analyzer
C. The min_gram value is too low causing too many tokens
D. The filter 'lowercase' should not be used in the analyzer
Solution
Step 1: Understand analyzer and search_analyzer roles
Indexing uses edge n-gram tokenizer, but searching uses standard analyzer which does not generate prefixes.
Step 2: Identify mismatch causing no autocomplete matches
Because search analyzer does not tokenize input into prefixes, queries won't match edge n-gram tokens.
Final Answer:
Search analyzer should match or complement edge n-gram analyzer, not standard -> Option B
Quick Check:
Analyzer mismatch = The search analyzer is incorrectly defined as 'standard' instead of using the same analyzer [OK]
Hint: Search analyzer must complement edge n-gram tokenizer [OK]
Common Mistakes:
Changing min_gram instead of fixing analyzer mismatch
Confusing ngram and edge_ngram tokenizer types
Removing lowercase filter unnecessarily
5. You want to implement autocomplete for a product search using edge n-gram tokenizer. Which approach correctly combines indexing and searching analyzers for best autocomplete results?
hard
A. Use edge n-gram tokenizer in the indexing analyzer and standard analyzer in the search analyzer
B. Use edge n-gram tokenizer in both indexing and search analyzers
C. Use edge n-gram tokenizer in indexing analyzer and a lowercase + standard tokenizer in search analyzer
D. Use standard tokenizer in indexing analyzer and edge n-gram tokenizer in search analyzer
Solution
Step 1: Understand indexing with edge n-gram tokenizer
Indexing uses edge n-gram tokenizer to create prefix tokens for autocomplete.
Step 2: Understand searching with standard tokenizer plus lowercase filter
Search analyzer uses standard tokenizer to tokenize user input normally and lowercase filter to match indexed tokens.
Step 3: Why not use edge n-gram tokenizer in search analyzer?
Using edge n-gram in search analyzer can cause unexpected partial matches and performance issues.
Final Answer:
Index with edge n-gram, search with standard + lowercase analyzer -> Option C
Quick Check:
Index edge n-gram + search standard = Use edge n-gram tokenizer in indexing analyzer and a lowercase + standard tokenizer in search analyzer [OK]
Hint: Index with edge n-gram, search with standard + lowercase [OK]
Common Mistakes:
Using edge n-gram tokenizer in search analyzer
Using standard tokenizer in indexing analyzer
Not applying lowercase filter in search analyzer
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.