1、字段类型简介
存储在ES中的字段有其对应的字段类型,不同的字段类型表示允许存放的数据(例如string或boolean类型数据)及类型支持的操作,例如可以针对string类型数据设置text及keyword类型,其中text类型分词后可进行全文搜索,而keyword类型则用于精确过滤及排序。
字段类型以族划分,同一族中的类型支持类似的搜索功能,但在空间使用上及性能表现上会存在差异。例如keyword类型,它由keyword、constant_keyword及wildcard字段类型组成,其它族类型仅包含一个字段类型,如布尔类型家族仅有boolean类型组成。
2、字段类型
2.1、公共类型
| 类型 | 说明 |
|---|
| binary | 使用Base64编码的二进制字符串 |
| boolean | true或false值 |
| Keywords | keyword族,keyword、constant_keyword及wildcard |
| Numbers | 数值类型,如long、double等 |
| Dates | 日期类型,包括date及date_nanos |
| alias | 针对已存在的字段映射一个alias |
2.2、对象及关系类型
| 类型 | 说明 |
|---|
| object | 表示JSON对象 |
| flattened | 整个JSON对象作为单个字段值 |
| nested | JSON对象保留与其内部字段关系 |
| join | 同一个索引中定义父子文档 |
2.3、结构化数据类型
| 类型 | 说明 |
|---|
| Range | 范围类型,如long_range,double_range,date_range或ip_range |
| ip | IPv4及IPv6地址 |
| version | 软件版本 |
| murmur3 | 计算并存储哈希值 |
2.4、聚合数据类型
| 类型 | 说明 |
|---|
| aggregate_metric_double | 聚合metric值 |
| histogram | 聚合数值并用直方图展示 |
2.5、文本搜索类型
| 类型 | 说明 |
|---|
| text fields | 文本族,包括text及match_omly_text,解析非结构化文本 |
| *annotated-text | 包含特殊标记的文本,用于识别命名实体 |
| completion | 用于suggestion的自动补全 |
| *search_as_you_type | 键入自动补全的类text类型 |
| token_count | 计算文本中token的数量 |
2.6、文档排序类型
| 类型 | 说明 |
|---|
| *dense_vector | 记录浮点值的密集向量 |
| *sparse_vector | 记录浮点值的稀疏向量 |
| *rank_feature | 记录数值特征以在查询时提高命中率 |
| *rank_features | 记录数值特征以在查询时提高命中率 |
2.7、空间数据类型
| 类型 | 说明 |
|---|
| geo_point | 经纬度点坐标 |
| geo_shape | 复杂形状,如多边形 |
| *point | 任意笛卡尔点 |
| *shape | 任意笛卡尔几何 |
2.8、其他类型
| 类型 | 说明 |
|---|
| percolator | 索引用QueryDSL编写的查询 |
3、数组
在ES中数组不需要专门的字段类型表示,默认情况下任何字段都可以包含0个或多个值,但是数组中的所有值必须是相同的字段类型,详情参见Array。
4、多字段
出于不同目的以不用方式索引同一字段通常很有用,如字符串字段可以映射为全文搜索的文本字段,以及排序或聚合的关键字字段,又或者使用不同的分析器(standard/english/french)来索引文本字段,大多数字段支持多字段都是通过fields参数来设置。
PUT /base_type{"mappings":{"properties":{"name":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above": 256}}}}}}