使用elasticsearch 就像使用数据库一样,在使用之前,总归是要声明 index 的每个type具体的字段。
一般我们不建议动态修改字段,会在线上带来各种各样的问题,而是建议在开发前就规划好字段,选择合适的字段尽可能提高 索引和检索 效率。
以下是基于 elasticsearch 6.3.2 版本,官方支持的字段类型:
核心类型 (core datatypes):
string (字符串)
- 分为 keyword (不可分词) 和 text ( 可分词)
Numeric datatypes (数字类型)
- long, integer, short, byte, double, float, half_float, scaled_float
Date datatype (日期类型)
- date
Boolean datatype (布尔类型)
- boolean
Binary datatype (二进制类型)
- binary
Range datatypes (范围类型)
- integer_range, float_range, long_range, double_range, date_range
Complex Datatypes (复杂类型)
- Object datatype ( object 用来表示 单个JSON对象)
- Nested datatype ( nested 用来表示 JSON 数组)
Geo datatypes (地理信息类型)
Geo-point datatype (geo_point 用来表示 经纬度)
Geo-Shape datatype (geo_shape 用来表示复杂的如多边形)
Specialised datatypes (专用类型)
IP datatype
- ip 表示ipv4 或者 ipv6 地址
Completion datatype
- completion 提供自动补全建议
Token count datatype
- token_count 计算字符串中的token个数
mapper-murmur3
- murmur3 计算一个hash值
Percolator type
- 从 query-dsl 中接收查询
join datatype
- 表示父子关系
Arrays
数组类型:不需要单独定义
Multi-fields
一般是类似这个需求时使用: 一个 字符串字段,既想用来分词(text),又想当作 keyword 进行聚合