字段类型
#
Easysearch 提供丰富的字段类型,用于存储和索引不同类型的数据。选择正确的字段类型对查询性能和存储效率至关重要。
概念指南 → 了解如何设计映射,请阅读:
字段类型速查
#
文本与关键字
#
选型建议:
- 需要全文搜索 →
text - 需要精确匹配/聚合/排序 →
keyword - 两者都需要 → 使用
fields 多字段映射
数值类型
#
选型建议:选择能容纳数据范围的最小类型,节省存储和内存。
日期与时间
#
布尔与二进制
#
对象与嵌套
#
选型建议:
- 简单对象 →
object - 对象数组且需要精确匹配单个元素 →
nested - 键名动态变化 →
flattened
地理位置
#
范围类型
#
搜索增强
#
向量类型
#
特殊类型
#
插件提供的字段类型
#
| 类型 | 说明 | 典型用途 | 来源 |
|---|
annotated_text | 带注解的文本 | 文本分析中的内联注释 | mapper-annotated-text 插件 |
murmur3 | Murmur3 哈希值 | 内容去重、指纹识别 | mapper-murmur3 插件 |
icu_collation_keyword | ICU 排序关键字 | 多语言排序 | analysis-icu 插件 |
场景选型指南
#
| 业务场景 | 推荐类型 | 说明 |
|---|
| 商品标题搜索 | text + keyword 多字段 | 全文搜索 + 聚合统计 |
| 商品 SKU | keyword | 精确匹配 |
| 商品价格 | scaled_float (scaling_factor=100) | 金额精确到分 |
| 订单时间 | date | 毫秒精度足够 |
| 日志时间 | date_nanos | 高精度时间戳 |
| 用户地址 | geo_point | 位置搜索 |
| 商品标签 | keyword 数组 | 多标签过滤 |
| 嵌套评论 | nested | 保持评论完整性 |
| 动态属性 | flattened | 键名不固定 |
| 搜索建议 | completion | 自动补全 |
| 语义搜索 | knn_vector | 向量相似度 |
数组
#
Easysearch 没有专门的数组类型。任何字段都可以包含零个或多个值,但数组中所有值必须是相同类型。
PUT testindex/_doc/1
{
"tags": ["elastic", "search", "engine"]
}
多字段(Multi-fields)
#
使用 fields 参数为同一字段创建多种索引方式:
PUT products
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword"
},
"pinyin": {
"type": "text",
"analyzer": "pinyin"
}
}
}
}
}
}
title → 全文搜索(中文分词)title.keyword → 精确匹配、聚合title.pinyin → 拼音搜索
空值处理(null_value)
#
默认情况下,null 值无法被搜索。使用 null_value 参数指定替代值:
PUT users
{
"mappings": {
"properties": {
"phone": {
"type": "keyword",
"null_value": "N/A"
}
}
}
}
索引文档时,null 会被替换为 "N/A",从而可以通过 term 查询搜索到。
动态映射
#
Easysearch 默认开启动态映射,自动为新字段推断类型:
| JSON 值 | 推断类型 |
|---|
true/false | boolean |
| 浮点数 | float |
| 整数 | long |
| 日期格式字符串 | date |
| 其他字符串 | text + keyword 多字段 |
| 对象 | object |
建议:生产环境使用显式映射,避免动态推断导致类型不一致。