पाठ 17 / 25
Highlighting and Autocomplete
Show why it matched; suggest as they type.
Snippets and suggestions
Highlighting returns fragments of matching fields with the matched terms wrapped in tags (<em> by default, configurable with pre_tags/post_tags); the default unified highlighter works for most cases. For autocomplete there are three main approaches. The search_as_you_type field type creates shingle and prefix sub-fields and is queried with multi_match of type bool_prefix; it matches words anywhere in the text. The completion suggester uses a completion field backed by an in-memory structure; it is very fast for prefix matching from the start of the input but has limited filtering (contexts). An edge n-gram analyzer at index time ("jac" -> j, ja, jac) with a plain analyzer at search time gives the most control at the cost of a larger index.
search_as_you_type plus highlighting
Kibana Dev Tools console syntax; send the same requests with curl or a client library.
PUT /titles
{
"mappings": {
"properties": {
"title": { "type": "search_as_you_type" }
}
}
}
GET /titles/_search
{
"query": {
"multi_match": {
"query": "wat jack",
"type": "bool_prefix",
"fields": [ "title", "title._2gram", "title._3gram" ]
}
},
"highlight": {
"fields": { "title": {} },
"pre_tags": [ "<mark>" ],
"post_tags": [ "</mark>" ]
}
}Debounce and keep it small
Send autocomplete requests after a short pause in typing, ask for a handful of results, and return only the fields you display (_source filtering). Escape highlight output before rendering it as HTML.
त्वरित जाँच: How is a search_as_you_type field usually queried?
- A cardinality aggregation
- A term query on the root field
- multi_match with type bool_prefix over the field and its n-gram sub-fields
- A match_phrase with slop 100
Answer
multi_match with type bool_prefix over the field and its n-gram sub-fields — bool_prefix treats the last term as a prefix.