search_analyzer
Usually, the sameanalyzer should be applied at index time and at search time, to ensure that the terms in the query are in the same format as the terms in the inverted index.
Sometimes, though, it can make sense to use a different analyzer at search time, such as when using theedge_ngram tokenizer for autocomplete or when using search-time synonyms.
By default, queries will use theanalyzer defined in the field mapping, but this can be overridden with thesearch_analyzer setting:
PUT my-index-000001{ "settings": { "analysis": { "filter": { "autocomplete_filter": { "type": "edge_ngram", "min_gram": 1, "max_gram": 20 } }, "analyzer": { "autocomplete": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "autocomplete_filter" ] } } } }, "mappings": { "properties": { "text": { "type": "text", "analyzer": "autocomplete", "search_analyzer": "standard" } } }}PUT my-index-000001/_doc/1{ "text": "Quick Brown Fox"}GET my-index-000001/_search{ "query": { "match": { "text": { "query": "Quick Br", "operator": "and" } } }}
- Analysis settings to define the custom
autocompleteanalyzer. - The
textfield uses theautocompleteanalyzer at index time, but thestandardanalyzer at search time. - This field is indexed as the terms: [
q,qu,qui,quic,quick,b,br,bro,brow,brown,f,fo,fox] - The query searches for both of these terms: [
quick,br]
SeeIndex time search-as-you- type for a full explanation of this example.
Thesearch_analyzer setting can be updated on existing fields using theupdate mapping API. Note, that in order to do so, any existing "analyzer" setting and "type" need to be repeated in the updated field definition.