match_only_text 字段类型 #
Introduced 1.10.0
简介 #
match_only_text
是一个为全文搜索优化的字段类型,是 text
类型的变体。它通过省略词条位置、词频和规范化信息来减少存储需求,适合对存储成本敏感但仍需要基本全文搜索功能的场景。
主要特点 #
存储优化:
- 不存储位置信息
- 不存储词频信息
- 不存储规范化信息
- 显著减少索引大小
评分机制:
- 禁用评分计算
- 所有匹配文档得分统一为 1.0
查询支持:
- 支持大多数查询类型
- 不支持 interval 查询
- 不支持 span 查询
- 支持但不优化短语查询
使用场景 #
适合用于:
- 需要快速查找包含特定词条的文档
- 对存储成本敏感的大数据集
- 不需要复杂相关性排序的场景
不适合用于:
- 需要基于相关性排序的查询
- 依赖词条位置或顺序的查询
- 需要精确短语匹配的场景
映射示例 #
PUT my_index
{
"mappings": {
"properties": {
"title": {
"type": "match_only_text"
}
}
}
}
参数配置 #
参数 | 说明 | 默认值 |
---|---|---|
analyzer | 分析器设置 | standard |
boost | 评分提升因子 | 1.0 |
eager_global_ordinals | 是否预加载全局序号 | false |
fielddata | 是否启用 fielddata | false |
fields | 多字段定义 | - |
index | 是否创建索引 | true |
meta | 字段元数据 | - |
注意: 虽然支持多种参数设置,但建议保持默认配置以维持其优化效果。
从 text 类型迁移 #
使用 Reindex API 可以将现有的 text
字段迁移到 match_only_text
:
// 1. 创建新索引
PUT destination
{
"mappings": {
"properties": {
"title": {
"type": "match_only_text"
}
}
}
}
// 2. 重建索引
POST _reindex
{
"source": {
"index": "source"
},
"dest": {
"index": "destination"
}
}
使用建议 #
评估需求:
- 确认是否需要复杂的相关性排序
- 确认是否需要位置相关的查询
存储优化:
- 尽量使用默认设置
- 避免启用额外的存储功能
查询限制:
- 避免使用依赖位置信息的查询
- 注意短语查询的性能影响
性能考虑:
- 适合大规模数据集
- 有助于减少存储成本