search_analyzer
编辑search_analyzer
编辑通常,应该在索引时和搜索时应用相同的分析器,以确保查询中的词项与倒排索引中的词项格式相同。
但是,有时在搜索时使用不同的分析器是有意义的,例如,当使用edge_ngram
分词器进行自动完成,或者使用搜索时同义词时。
默认情况下,查询将使用字段映射中定义的analyzer
,但是可以使用search_analyzer
设置来覆盖它。
resp = client.indices.create( index="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" } } }, ) print(resp) resp1 = client.index( index="my-index-000001", id="1", document={ "text": "Quick Brown Fox" }, ) print(resp1) resp2 = client.search( index="my-index-000001", query={ "match": { "text": { "query": "Quick Br", "operator": "and" } } }, ) print(resp2)
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
const response = await client.indices.create({ index: "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", }, }, }, }); console.log(response); const response1 = await client.index({ index: "my-index-000001", id: 1, document: { text: "Quick Brown Fox", }, }); console.log(response1); const response2 = await client.search({ index: "my-index-000001", query: { match: { text: { query: "Quick Br", operator: "and", }, }, }, }); console.log(response2);
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”。