12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- [[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,console]
- --------------------------------------------------
- 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": {
- "properties": {
- "text": {
- "type": "text",
- "analyzer": "autocomplete", <2>
- "search_analyzer": "standard" <2>
- }
- }
- }
- }
- PUT my_index/_doc/1
- {
- "text": "Quick Brown Fox" <3>
- }
- GET my_index/_search
- {
- "query": {
- "match": {
- "text": {
- "query": "Quick Br", <4>
- "operator": "and"
- }
- }
- }
- }
- --------------------------------------------------
- <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.
- TIP: The `search_analyzer` setting can be updated on existing fields
- using the <<indices-put-mapping,PUT mapping API>>.
|