Search Analyzer 参数 #
search_analyzer 参数指定查询时使用的分析器,可以与索引时的 analyzer 不同。这允许在写入和查询时使用不同的文本分析策略。
相关指南(先读这些) #
分析器选择优先级 #
Easysearch 按以下优先级选择查询时分析器:
- 查询中指定的
analyzer参数(如match查询的analyzer字段) - 映射中字段的
search_analyzer - 索引设置
analysis.analyzer.default_search - 映射中字段的
analyzer standard分析器
示例 #
写入时最大化召回,查询时精确匹配 #
PUT my-index
{
"settings": {
"analysis": {
"analyzer": {
"ik_smart_search": {
"type": "custom",
"tokenizer": "ik_smart"
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
}
| 阶段 | 分析器 | 策略 |
|---|---|---|
| 索引时 | ik_max_word | 最细粒度分词,生成更多词项,最大化召回 |
| 查询时 | ik_smart | 智能分词,生成更少词项,提高精确度 |
同义词扩展只在查询时生效 #
"title": {
"type": "text",
"analyzer": "standard",
"search_analyzer": "synonym_analyzer"
}
这样索引时不扩展同义词(节省空间),查询时通过同义词分析器扩展查询词。
常见用法 #
| 场景 | 索引分析器 | 查询分析器 |
|---|---|---|
| 中文搜索 | ik_max_word(最大召回) | ik_smart(精确匹配) |
| 同义词扩展 | standard | 带同义词过滤的自定义分析器 |
| 拼音搜索 | pinyin | standard(用户输入可能是拼音也可能是汉字) |
注意事项 #
- 如果不设置
search_analyzer,查询时默认使用字段的analyzer - 索引时和查询时使用不同分析器时,需确保两者产生的词项能够正确匹配
- 可以在具体查询中通过
analyzer参数临时覆盖