search_analyzer
编辑search_analyzer
编辑
通常,应该在索引时和搜索时应用相同的 分析器,以确保查询中的词语与倒排索引中的词语格式相同。
但是,有时在搜索时使用不同的分析器是有意义的,例如在使用 edge_ngram
分词器进行自动完成或使用搜索时同义词时。
默认情况下,查询将使用字段映射中定义的 analyzer
,但可以使用 search_analyzer
设置覆盖它。
response = client.indices.create( index: 'my-index-000001', body: { 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' } } } } ) puts response response = client.index( index: 'my-index-000001', id: 1, body: { text: 'Quick Brown Fox' } ) puts response response = client.search( index: 'my-index-000001', body: { query: { match: { text: { query: 'Quick Br', operator: 'and' } } } } ) puts response
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" } } } }
分析设置以定义自定义 |
|
|
|
此字段被索引为以下词语:[ |
|
查询搜索以下两个词语:[ |
有关此示例的完整说明,请参阅 索引时搜索即时类型。
可以使用 更新映射 API 在现有字段上更新 search_analyzer
设置。请注意,为了执行此操作,需要在更新的字段定义中重复任何现有的“analyzer”设置和“type”。