配置项作用 #
indices.query.query_string.analyze_wildcard 配置项用于控制在通配符和前缀查询中是否对词项进行分词器分析。
当启用时,通配符词项会被分词器分解成多个词元(tokens),从而实现更灵活的匹配模式。
配置项属性 #
- 配置路径:
indices.query.query_string.analyze_wildcard - 数据类型:
Boolean(布尔值) - 默认值:
false - 是否可选: 是
- 作用域: NodeScope(节点级别)
配置项详解 #
工作机制 #
通配符查询处理流程
analyzeWildcard = false (默认):
查询: title:foo*bar*
│
↓
只进行规范化处理
│
↓
↓ foo*bar* (直接使用)
│
↓
查找以 "foo*bar*" 开头的词项
│
↓
返回结果
analyzeWildcard = true:
查询: title:foo*bar*
│
↓
进行分词分析
│
↓ ↓
foo bar
│ │
↓ ↓
tokens tokens
│ │
↓ ↓
foo* OR bar* (扩展匹配)
│
↓
查找以 "foo" 或 "bar" 开头的词项
│
↓
返回更广泛的结果
分析模式对比 #
不同配置的匹配结果
查询: phone*
analyzeWildcard = false:
只规范化
↓
phone* → 匹配 "phone*" 开头的词
│
↓
精确匹配前缀
analyzeWildcard = true:
分词分析
↓
phone → [phone, tele, call]
↓
phone* → 匹配 [phone*, tele*, call*]
│
↓
扩展匹配前缀
与字段分析器的关系 #
字段分析器的影响
字段分析器: standard
原始文本: "smart phone"
analyzeWildcard = false:
smart* → 查找 "smart*" 开头
analyzeWildcard = true:
分析: [smart, phone]
smart* → [smart*, phone*]
配置建议 #
生产环境(默认) #
indices:
query:
query_string:
analyze_wildcard: false # 默认值
建议: 保持默认值 false。精确匹配,性能更好。
同义词搜索 #
indices:
query:
query_string:
analyze_wildcard: true
建议: 设置为 true。使用同义词或需要词元匹配时使用。
词干提取场景 #
indices:
query:
query_string:
analyze_wildcard: true
建议: 设置为 true。使用词干提取等高级分析时使用。
代码示例 #
easysearch.yml 基础配置 #
indices:
query:
query_string:
analyze_wildcard: false
启用分析配置 #
indices:
query:
query_string:
analyze_wildcard: true
查询级别覆盖 #
GET /_search
{
"query": {
"query_string": {
"query": "product*",
"analyze_wildcard": true
}
}
}
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
indices.query.query_string.analyze_wildcard | 是否分析通配符 | false |
indices.query.query_string.allowLeadingWildcard | 是否允许前导通配符 | true |
查询示例 #
不分析通配符(默认) #
GET /_search
{
"query": {
"query_string": {
"query": "title:quick*"
}
}
}
结果: 只匹配以 “quick” 开头的词项。
启用分析通配符 #
GET /search
{
"query": {
"query_string": {
"query": "title:quick*",
"analyze_wildcard": true
}
}
}
结果: 匹配 “quick” 及其同义词开头的词项。
性能影响分析 #
| analyze_wildcard 设置 | 优点 | 缺点 |
|---|---|---|
| false(默认) | 性能好,可预测 | 匹配有限 |
| true | 匹配更灵活 | 额外 CPU 开销 |
CPU 开销对比 #
查询性能对比
查询: term*term*term
analyzeWildcard = false:
- 规范化处理
- 直接查找前缀
- CPU 开销: 低 ✅
analyzeWildcard = true:
- 分词分析
- 扩展查找前缀
- CPU 开销: 高 ❌
使用场景 #
推荐使用默认值的场景 #
- 标准搜索: 常规的前缀/通配符搜索
- 性能优先: 需要快速响应
- 简单字段: 字段不使用复杂分析器
推荐启用分析的场景 #
- 同义词扩展: 字段配置了同义词
- 词干提取: 使用词干提取器
- 复杂分析器: 使用自定义分析器
- 灵活匹配: 需要词元级别的匹配
分析器配置示例 #
配合字段分析器
索引映射:
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "standard"
}
}
}
}
使用 analyze_wildcard:
查询: "title:running*"
│
↓
standard 分析器分词
│
↓ ↓
[running, ran]
│
↓
running* OR ran*
│
↓
扩展匹配结果
注意事项 #
默认值: 默认值为
false,适用于大多数场景。性能影响: 启用分析会增加 CPU 开销。
字段分析器: 效果取决于字段的分词器配置。
查询级别: 可以在查询请求中覆盖索引级配置。
动态更新: 支持动态更新,修改后立即生效。
匹配范围: 启用后会扩大匹配范围。
测试验证: 启用后需要验证查询结果符合预期。
同义词: 同义词扩展时特别有用。
词干提取: 词干提取时可以提高召回率。
监控建议: 监控查询性能,评估配置效果。





