Autocomplete helps users find words or phrases quickly as they type. Edge n-gram breaks words into smaller parts from the start, making autocomplete fast and accurate.
Autocomplete with edge n-gram in Elasticsearch
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete_analyzer": {
"tokenizer": "autocomplete_tokenizer",
"filter": ["lowercase"]
}
},
"tokenizer": {
"autocomplete_tokenizer": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20,
"token_chars": ["letter"]
}
}
}
},
"mappings": {
"properties": {
"field_name": {
"type": "text",
"analyzer": "autocomplete_analyzer",
"search_analyzer": "standard"
}
}
}
}The edge_ngram tokenizer breaks words into prefixes starting from the first letter.
Use search_analyzer as standard to avoid breaking search input into n-grams.
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete_analyzer": {
"tokenizer": "autocomplete_tokenizer",
"filter": ["lowercase"]
}
},
"tokenizer": {
"autocomplete_tokenizer": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": ["letter"]
}
}
}
},
"mappings": {
"properties": {
"product_name": {
"type": "text",
"analyzer": "autocomplete_analyzer",
"search_analyzer": "standard"
}
}
}
}{
"settings": {
"analysis": {
"analyzer": {
"autocomplete_analyzer": {
"tokenizer": "autocomplete_tokenizer",
"filter": ["lowercase"]
}
},
"tokenizer": {
"autocomplete_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 15,
"token_chars": ["letter", "digit"]
}
}
}
},
"mappings": {
"properties": {
"username": {
"type": "text",
"analyzer": "autocomplete_analyzer",
"search_analyzer": "standard"
}
}
}
}{
"settings": {
"analysis": {
"analyzer": {
"autocomplete_analyzer": {
"tokenizer": "autocomplete_tokenizer",
"filter": ["lowercase"]
}
},
"tokenizer": {
"autocomplete_tokenizer": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20,
"token_chars": ["letter"]
}
}
}
},
"mappings": {
"properties": {
"empty_field": {
"type": "text",
"analyzer": "autocomplete_analyzer",
"search_analyzer": "standard"
}
}
}
}This program creates an index with edge n-gram autocomplete on product_name. It adds three products and searches for "App" to get autocomplete suggestions starting with "App".
PUT /autocomplete_example
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete_analyzer": {
"tokenizer": "autocomplete_tokenizer",
"filter": ["lowercase"]
}
},
"tokenizer": {
"autocomplete_tokenizer": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": ["letter"]
}
}
}
},
"mappings": {
"properties": {
"product_name": {
"type": "text",
"analyzer": "autocomplete_analyzer",
"search_analyzer": "standard"
}
}
}
}
POST /autocomplete_example/_doc/1
{
"product_name": "Apple MacBook Pro"
}
POST /autocomplete_example/_doc/2
{
"product_name": "Apple Watch"
}
POST /autocomplete_example/_doc/3
{
"product_name": "Samsung Galaxy"
}
GET /autocomplete_example/_search
{
"query": {
"match": {
"product_name": "App"
}
}
}Time complexity: Indexing is slower due to many tokens from edge n-grams; search is fast because of prefix matching.
Space complexity: Uses more disk space because each word creates multiple tokens.
Common mistake: Using edge n-gram analyzer for search input instead of standard analyzer causes poor search results.
Use edge n-gram for autocomplete prefix matching; use completion suggester for faster but less flexible autocomplete.
Edge n-gram tokenizer breaks words into prefixes for fast autocomplete.
Use a custom analyzer with edge n-gram tokenizer for indexing and standard analyzer for searching.
Autocomplete improves user experience by suggesting matches as users type.
Practice
edge_ngram tokenizer in Elasticsearch autocomplete?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 AQuick Check:
edge_ngram tokenizer = prefix splitting [OK]
- Thinking edge n-gram sorts results
- Confusing with stop word removal
- Assuming it indexes only full words
edge_ngram tokenizer in Elasticsearch settings?Solution
Step 1: Identify correct tokenizer type and parameters
The edge_ngram tokenizer requires type 'edge_ngram' with min_gram and max_gram settings.Step 2: Check token_chars usage
{ "tokenizer": { "my_edge_ngram": { "type": "edge_ngram", "min_gram": 2, "max_gram": 5, "token_chars": ["letter"] } } } correctly sets token_chars to 'letter' to include only letters in tokens.Final Answer:
Option A with type 'edge_ngram' and proper min_gram, max_gram -> Option AQuick Check:
edge_ngram tokenizer syntax = { "tokenizer": { "my_edge_ngram": { "type": "edge_ngram", "min_gram": 2, "max_gram": 5, "token_chars": ["letter"] } } } [OK]
- Using 'standard' type instead of 'edge_ngram'
- Defining edge_ngram under analyzer instead of tokenizer
- Confusing ngram with edge_ngram tokenizer
"cat" during indexing?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 DQuick Check:
edge n-gram tokens for 'cat' = ["c", "ca", "cat"] [OK]
- Assuming only full word token is generated
- Including tokens from middle or end of word
- Confusing n-gram with edge n-gram tokens
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 BQuick Check:
Analyzer mismatch = The search analyzer is incorrectly defined as 'standard' instead of using the same analyzer [OK]
- Changing min_gram instead of fixing analyzer mismatch
- Confusing ngram and edge_ngram tokenizer types
- Removing lowercase filter unnecessarily
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 CQuick Check:
Index edge n-gram + search standard = Use edge n-gram tokenizer in indexing analyzer and a lowercase + standard tokenizer in search analyzer [OK]
- Using edge n-gram tokenizer in search analyzer
- Using standard tokenizer in indexing analyzer
- Not applying lowercase filter in search analyzer
Ready to prove it?
Pass the test and this pattern moves unknown
