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}}}}}}