Search analyzers
Search analyzers are specified at query time and are used to analyze the query string when you run a full-text query on a text field.
Determining which search analyzer to use
To determine which analyzer to use for a query string at query time, Lucenia examines the following parameters in order:
- The
analyzerparameter of the query - The
search_analyzermapping parameter of the field - The
analysis.analyzer.default_searchindex setting - The
analyzermapping parameter of the field - The
standardanalyzer (default)
In most cases, specifying a search analyzer that is different from the index analyzer is not necessary and could negatively impact search result relevance or lead to unexpected search results.
For information about verifying which analyzer is associated with which field, see Verifying analyzer settings.
Specifying a search analyzer for a query string
Specify the name of the analyzer you want to use at query time in the analyzer field:
GET shakespeare/_search
{
"query": {
"match": {
"text_entry": {
"query": "speak the truth",
"analyzer": "english"
}
}
}
}
Valid values for built-in analyzers are standard, simple, whitespace, stop, keyword, pattern, fingerprint, or any supported language analyzer.
Specifying a search analyzer for a field
When creating index mappings, you can provide the search_analyzer parameter for each text field. When providing the search_analyzer, you must also provide the analyzer parameter, which specifies the index analyzer to be used at indexing time.
For example, the following request specifies the simple analyzer as the index analyzer and the whitespace analyzer as the search analyzer for the text_entry field:
PUT testindex
{
"mappings": {
"properties": {
"text_entry": {
"type": "text",
"analyzer": "simple",
"search_analyzer": "whitespace"
}
}
}
}
Specifying the default search analyzer for an index
If you want to analyze all query strings at search time with the same analyzer, you can specify the search analyzer in the analysis.analyzer.default_search setting. When providing the analysis.analyzer.default_search, you must also provide the analysis.analyzer.default parameter, which specifies the index analyzer to be used at indexing time.
For example, the following request specifies the simple analyzer as the index analyzer and the whitespace analyzer as the search analyzer for the testindex index:
PUT testindex
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"type": "simple"
},
"default_search": {
"type": "whitespace"
}
}
}
}
}