4 数据类型
- 字符串
text、keyword - 数值型
long、integer、short, byte, double, float half_float, scaled_float - 布尔
boolean - 日期
date - 二进制
binary - 范围
integer_range, float_range, long_range, double_range, date_ range - 复杂数据类型
数组类型array、对象类型object、嵌套类型nested object
- 地理位置
geo_point、geo_shape - 专用类型
记录ip地址 ip
实现自动补全 completion
记录分词数 token_count
记录字符串hash值 murmur3
percolator
join - 多字段特性multi-fields
允许对同一个字段采用不同的配置,比如分词,常见例子如对人名实现拼音搜索,
只需要在人名中新增一个子字段为pinyin即可
ES可以自动识别文档字段类型,从而降低用户使用成本,如下所示
PUT /test_index/doc/1 { "username": "java", "age": "18" } GET /test_index/_mapping
{ "test_index" : { "mappings" : { "properties" : { "age" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "username" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } } } } }
ES是依靠JSON文档的字段类型来实现自动识别字段类型,支持的类型如下:
PUT /test_index/doc/1 {"username":" alfred", "age":14, "birth":"1988-10-10", "married":false, "year":18, "tags":["boy","fashion"], "money":100.1 } GET /test_index/_mapping
{ "test_index" : { "mappings" : { "properties" : { "age" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "birth" : { "type" : "date" }, "married" : { "type" : "boolean" }, "money" : { "type" : "float" }, "tags" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "username" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "year" : { "type" : "long" } } } } }