2015-08-06 11:24:29 -04:00
|
|
|
[[search-analyzer]]
|
|
|
|
=== `search_analyzer`
|
|
|
|
|
|
|
|
Usually, the same <<analyzer,analyzer>> 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 the <<analysis-edgengram-tokenizer,`edge_ngram`>>
|
|
|
|
tokenizer for autocomplete.
|
|
|
|
|
|
|
|
By default, queries will use the `analyzer` defined in the field mapping, but
|
|
|
|
this can be overridden with the `search_analyzer` setting:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
PUT /my_index
|
|
|
|
{
|
|
|
|
"settings": {
|
|
|
|
"analysis": {
|
|
|
|
"filter": {
|
|
|
|
"autocomplete_filter": {
|
|
|
|
"type": "edge_ngram",
|
|
|
|
"min_gram": 1,
|
|
|
|
"max_gram": 20
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"analyzer": {
|
|
|
|
"autocomplete": { <1>
|
|
|
|
"type": "custom",
|
|
|
|
"tokenizer": "standard",
|
|
|
|
"filter": [
|
|
|
|
"lowercase",
|
|
|
|
"autocomplete_filter"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"mappings": {
|
|
|
|
"my_type": {
|
|
|
|
"properties": {
|
|
|
|
"text": {
|
|
|
|
"type": "string",
|
|
|
|
"analyzer": "autocomplete", <2>
|
|
|
|
"search_analyzer": "standard" <2>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
PUT my_index/my_type/1
|
|
|
|
{
|
|
|
|
"text": "Quick Brown Fox" <3>
|
|
|
|
}
|
|
|
|
|
|
|
|
GET my_index/_search
|
|
|
|
{
|
|
|
|
"query": {
|
|
|
|
"match": {
|
|
|
|
"text": {
|
|
|
|
"query": "Quick Br", <4>
|
|
|
|
"operator": "and"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
--------------------------------------------------
|
|
|
|
// AUTOSENSE
|
|
|
|
|
|
|
|
<1> Analysis settings to define the custom `autocomplete` analyzer.
|
|
|
|
<2> The `text` field uses the `autocomplete` analyzer at index time, but the `standard` analyzer at search time.
|
|
|
|
<3> This field is indexed as the terms: [ `q`, `qu`, `qui`, `quic`, `quick`, `b`, `br`, `bro`, `brow`, `brown`, `f`, `fo`, `fox` ]
|
|
|
|
<4> The query searches for both of these terms: [ `quick`, `br` ]
|
|
|
|
|
|
|
|
See {defguide}/_index_time_search_as_you_type.html[Index time search-as-you-
|
|
|
|
type] for a full explanation of this example.
|
2015-08-12 15:21:37 -04:00
|
|
|
|
|
|
|
TIP: The `search_analyzer` setting must have the same setting for fields of
|
|
|
|
the same name in the same index. Its value can be updated on existing fields
|
|
|
|
using the <<indices-put-mapping,PUT mapping API>>.
|
|
|
|
|
|
|
|
|