1.核心数据类型String:text、keyword数值类型:long、integer、short、byte、double、float、half_float、scaled_float布尔型:boolean日期型:date、date_nanosBinary:二进制范围类型:integer_range、float_range、long_range、double_range、date_range1。stringtexttext类型的字段数据将被标记化。在生成倒排索引之前,字符串会被tokenizer分成token。文本类型的字段不用于排序,很少用于聚合(termsAggregation除外)。如果一个字段需要进行全文搜索或模糊匹配,如文章内容、产品描述、新闻内容等,则应使用文本类型。keyword关键字类型的字段内容不会被分词。关键字类型的字段只能按精确值搜索,用于过滤、排序和聚合。适用于索引结构化字段,如IP地址、性别、地区等。2、numericinteger类型的最小值和最大值表示byte-1281278位有符号整数(1字节),相当于MySQL中的signedtinyintshort-327683276716位有符号整数(2字节),相当于MySQLSignedsmallinteger-2147483648(-2^31^)2147483647(2^31^-1)32-bitsignedinteger(4bytes),相当于signedintlong-9223372036854775808)(-2^63inMySQL^)9223372036854775807(2^63^-1)64位有符号整数(8字节),相当于MySQL中的signedbigint。对于整数类型的字段,在满足要求的情况下,选择范围越小越好。数据类型。比如某个字段的最大值不超过100,那么就选择byte类型。迄今为止,吉尼斯世界纪录记载的人类最高年龄为134岁。对于年龄字段,短就够了。字段长度越短,索引和搜索效率越高。小数类型的最小值和最大值说明half_float2^-24^6550416位半精度浮点数float2^-149^(2-2^-23^)·2^127^32位单精度浮点数double2^-1074^(2-2^-52^)·2^1023^64位双精度浮点数scaled_float缩放型浮点数处理浮点数时,缩放浮点型优先。scaledfloat是通过缩放因子将浮点数转换为long类型。例如,价格只需要精确到美分。价格字段的值为57.34。如果比例因子设置为100,则存储时为5734。所有API都会将price的值作为浮点数,其实Elasticsearch的底层存储是整数类型,因为压缩整数比压缩浮点数更节省存储空间。3.Boolean如果一个字段是Boolean,可接受的值为true,false。在Elasticsearch5.4之前,接受可以解释为真或假的字符串和数字。5.4版本以后只接受true,false,"true","false"。4、日期类型dateJSON没有日期类型的数据类型,所以在Elasticsearch中,日期可以是:一个包含格式化日期的字符串,比如“2015-01-01”或者“2015/01/0112:10”:30"表示时间的长整型毫秒数。一个整数,表示以秒为单位的时间。Elasticsearch在内部将日期转换为UTC(协调世界时)并将其存储为表示时间毫秒数的long。日期格式可以自定义。如果不指定格式,则使用默认值:"strict_date_optional_time||epoch_millis"此时可以解析出以下三种日期格式:"2020-05-01""2020-05-01T12:10:30Z"1591234567890date_nanos这种数据类型是日期数据类型的补充。现有的日期类型可以存储毫秒时间。而date_nanos可以存储纳秒时间。5.binary二进制数据类型接受Base64编码字符串的二进制值。默认情况下不存储字段,无法搜索。Base64编码的二进制值不能嵌入换行符\n6.范围类型描述integer_range32位有符号整数范围值,-2^31^~2^31^-1long_range62位有符号整数范围值,-2^63^~2^63^-1float_range32位单精度浮点-pointnumberrangevaluedouble_range64位单精度浮点数范围值date_range64位无符号整数表示的日期值范围ip_rangeIPv4或IPv6的范围值2.复合数据类型1.对象类型object用于存储单个JSON对象。JSON本质上是有层次关系的,文档包含内部对象,内部对象本身也可以包含内部对象。2、嵌套类型nested用于存储由多个JSON对象组成的数组。嵌套类型是对象类型的特例,它允许对对象数组进行独立的索引和查询。Lucene没有内部对象的概念,因此Elasticsearch将对象层次结构扁平化为字段名称和值的简单列表。三、地理位置类型1、地理坐标类型geo_point用于存储经纬度坐标对,可用于查找一定范围内的地理点。该范围可以是相对于中心点的固定距离,也可以是多边形或地理哈希单元。按地理位置或距中心点的距离聚合文档。将距离整合到文档相关性分数中。用于存储地理位置信息的经纬度坐标对可用于以下场景:查找一定范围内的地理位置。按地理位置或距中心点的距离聚合文档。将距离因素整合到文档的评分中。按距离对文档进行排序。2.地理形状类型geo_shape地理形状数据类型便于索引和搜索任意地理形状,例如矩形、三角形或其他多边形。无论数据是被索引还是在查询执行期间,都可以使用地理形状数据类型在地理点基础上包含地理形状。Elasticsearch使用GeoJSON格式来表示地理形状。GeoJSON是一种用于编码各种地理数据结构的格式。对象可以表示几何、特征或特征集,支持点、线、面、多点、多线、多面等几何类型。GeoJSON中的要素包含几何对象和其他属性,要素集合表示一组要素。关于GeoJSON的更多信息,请参考《GeoJSON格式规范说明》4。IPIP地址类型的特殊类型,它存储IPv4和IPv6地址。完成数据类型完成提供自动完成建议。是一个整数字段。例如:在mapping中指定name为text类型,增加name_length字段统计分词后term的长度,type为token_count,tokenizer为标准tokenizer。mapper-murmur3murmur3在索引时计算值的哈希值并将它们存储在索引中同一个索引定义一个parent/child关系Rank特征Rank特征rank特征记录数值特征,提高查询时的命中率Densevectors,记录浮点值的densevectorsSparsevectors,记录浮点值的sparsevectorsSearch-as-you-typeSearchbytype,text-likefields,Optimizeforqueries实现按类型完成Alias别名,为现有字段定义别名Flattened允许将整个JSON对象作为单个字段进行索引。Shapeshapeforarbitrarycartesiangeometrys.Histogramhistogramforpre-aggregatednumericalvaluesforpercentilesaggregations.5.数组类型数组类型不需要具体指定数组元素的类型。数组中可以包含任何字段类型,但数组中的所有值必须具有相同的数据类型。字符数组:["one","two"]整数数组:[1,2]数组数组:[1,[2,3]]等价于[1,2,3]对象数组:[{"name":"Mary","age":12},{"name":"John","age":10}]参考:官方文档v7.6:字段数据类型《从Lucene到Elasticsearch全文检索实战》《Elasticsearch技术解析与实战》
