elasticsearch摸石头过河——常用数据类型(二)
elasticsearch数据类型
Elasticsearch 类型是 以 Lucene 处理文档的这个方式为基础来实现的。一个索引可以有多个类型,这些类型的文档可以存储在相同的索引中。
Lucene 没有文档类型的概念,每个文档的类型名被存储在一个叫 _type
的元数据字段上。 当我们要检索某个类型的文档时, Elasticsearch 通过在 _type
字段上使用过滤器限制只返回这个类型的文档。
注意问题:不同type中,有两个相同的字段名称,这时字段类型必须是相同的,否则会报错!
一,字符串类型
ElasticSearch 5.0之后,除去了字符串string类型,增加了:
text
(全文搜索) 老版本:string—>index(analyzed)
keyword(关键词搜索) 老版本:string—>index(not_analyzed)
默认同时满足keyword与text类型,如果做聚合或者排序,可在字段添加keyword,做关键词搜索(long.keyword)
二,数值类型
long,int,short,byte,double,float
三,日期类型(UTC时间) 1970年1月1日0时0分0秒就是UNIX时间0。
{ “date”: “2015-01-01” }
{ “date”: “2015-01-01T12:10:30Z” }
{ “date”: 1420070400001 }
ElasticSearch 内部会将日期数据转换为UTC,并存储为milliseconds-since-the-epoch的long型整数。
四,布尔类型
布尔字段接受JSON true和false值,
但也可以接受被解释为true或false的字符串和数字:
false值举例:
false,“false”,“off”,“no”,“0”,“”(空字符串),0,0.0
true值举例:
以上false示例的反面,一切非假值。
五,二进制类型
二进制类型接受二进制值作为Base64编码字符串,该字段默认不存储,不可搜索(意思就是只在source字段中存储整个 文档,不会单独当成列存储)
六,范围数据类型
integer_range :整型范围类型;
float_range :单精度浮点范围类型;
long_range :长整型范围类型;
double_range :双精度范围类型;
date_range :时间范围类型;
ip_range :IP范围类型。
使用场景:比如前端的时间选择表单、年龄范围选择表单等。
七,对象类型
类似json对象
八,数组类型
必须保持类型相同