字段类型

字段类型 #

Easysearch 提供丰富的字段类型,用于存储和索引不同类型的数据。选择正确的字段类型对查询性能和存储效率至关重要。

概念指南 → 了解如何设计映射,请阅读:


字段类型速查 #

文本与关键字 #

类型说明典型用途
text分词索引的全文字段文章内容、描述、评论
keyword不分词的精确值ID、状态码、标签、邮箱
match_only_text仅用于匹配,节省空间日志内容(无需评分)
wildcard高效通配符搜索日志模式匹配
token_count存储分词后的词元数量文本长度统计

选型建议

  • 需要全文搜索 → text
  • 需要精确匹配/聚合/排序 → keyword
  • 两者都需要 → 使用 fields 多字段映射

数值类型 #

类型范围存储大小典型用途
byte-128 ~ 1271 字节小整数
short-32,768 ~ 32,7672 字节短整数
integer-2³¹ ~ 2³¹-14 字节常规整数
long-2⁶³ ~ 2⁶³-18 字节大整数、时间戳
float32 位浮点4 字节常规浮点数
double64 位浮点8 字节高精度浮点
half_float16 位浮点2 字节节省空间的浮点
scaled_float缩放的长整型8 字节金额(scaling_factor=100)

选型建议:选择能容纳数据范围的最小类型,节省存储和内存。

日期与时间 #

类型精度典型用途
date毫秒常规日期时间
date_nanos纳秒高精度时间戳(日志、监控)

布尔与二进制 #

类型说明典型用途
booleantrue/false开关状态、标志位
binaryBase64 编码二进制文件内容、加密数据

对象与嵌套 #

类型说明典型用途
objectJSON 对象(默认扁平化)简单嵌套结构
nested独立索引的对象数组需保持数组元素关联的对象
flattened扁平化为字符串的对象动态键值对、日志标签
flattened_text扁平化文本对象(Easysearch 扩展)动态结构化数据
join父子文档关系同索引内的层级关系

选型建议

  • 简单对象 → object
  • 对象数组且需要精确匹配单个元素 → nested
  • 键名动态变化 → flattened

地理位置 #

类型说明典型用途
geo_point经纬度坐标点位置搜索、距离排序
geo_shape地理形状(多边形等)区域搜索、地理围栏

范围类型 #

类型说明典型用途
integer_range整数范围年龄范围、价格区间
long_range长整数范围大数值范围
float_range浮点范围浮点数区间
double_range双精度范围高精度区间
date_range日期范围有效期、预约时段
ip_rangeIP 地址范围IP 段匹配

搜索增强 #

类型说明典型用途
completion补全建议字段搜索框自动补全
search_as_you_type即时搜索边输入边搜索
rank_feature排名特征(单值)PageRank、热度评分
rank_features排名特征(多值)多维度评分

向量类型 #

类型说明典型用途
knn_vectork-NN 向量语义搜索、图像相似、向量近邻搜索

特殊类型 #

类型说明典型用途
ipIPv4/IPv6 地址IP 地址存储与搜索
alias字段别名兼容旧字段名
percolator存储查询反向匹配(文档匹配查询)

插件提供的字段类型 #

类型说明典型用途来源
annotated_text带注解的文本文本分析中的内联注释mapper-annotated-text 插件
murmur3Murmur3 哈希值内容去重、指纹识别mapper-murmur3 插件
icu_collation_keywordICU 排序关键字多语言排序analysis-icu 插件

场景选型指南 #

业务场景推荐类型说明
商品标题搜索text + keyword 多字段全文搜索 + 聚合统计
商品 SKUkeyword精确匹配
商品价格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/falseboolean
浮点数float
整数long
日期格式字符串date
其他字符串text + keyword 多字段
对象object

建议:生产环境使用显式映射,避免动态推断导致类型不一致。