1、text当需要全文检索某个字段的内容时,可以使用text类型,它支持长内容的存储,比如文章内容、商品信息等,在保存这类字段的时候会被tokenizer解析并拆分成多个term,然后根据拆分的term生成对应的索引。需要注意的是,文本类型的字段不能用于精确匹配,也不能直接用于排序聚合,也称为分析字符串。2.keyword关键字类型的字段内容不会被tokenizer分析拆分,而是直接根据原文生成倒排索引,所以可以直接通过原文准确检索到keyword类型的字段。这种类型的字段一般用于过滤、排序和聚合操作。3、ES中的日期类型night支持以下两种格式:strict_date_optional_time,表示yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ或yyyy-MM-dd格式dateepoch_millis,表示自1970.1.1以来的从零到现在的毫秒数,除了指定日期类型外,尽量指定相应的格式,如下:PUTblog{"mappings":{"properties":{"publishDate":{"type":"date","format":"yyyy-MM-ddHH:mm:ss||yyyy-MM-dd||epoch_millis"}}}}在这里添加,如果字段类型是日期类型,使用canal时会出现将mysql数据同步到ES存在时间格式转换问题。具体如下:java.lang.RuntimeException:ESsynccommiterrorElasticsearchException[Elasticsearch异常[type=mapper_parsing_exception,reason=failedtoparsefield[createTime]oftype[date]indocumentwithid'XXX']];嵌套:ElasticsearchException[Elasticsearch异常[type=illegal_argument_exception,原因=格式无效:“2020-08-25T15:27:01+08:00”在“-08-25T15:27:01+08:00”处格式错误]];许多解决方案解决方案是通过修改运河源代码来处理的。具体说明参见Canal同步数据到ES时间格式问题。之前用ES按时间排序,所以直接把对应的时间字段存储成long类型的格式,也就是时间戳。数据同步时,将数据表中的时间字段转换为时间戳进行同步。4.Boolean类型boolean类型,有true和false两个值5、numeric类型类型取值范围为byte-2^7~2^7-1short-2^15~2^15-1integer-2^31~2^31-1long-2^63~2^63-1float32位单精度IEEE754浮点型double64位双精度IEEE754浮点型half_float16位半精度IEEE754浮点-pointtypescaled_float缩放浮点数一般情况下,优先使用范围较小的类型6。数组类型ES中没有特殊的数组类型,因为ES中每个字段可以包含多个值,只要多个值的类型一致即可。例如,以下索引结构:PUTindex_study{"mappings":{"game":{"properties":{"keyword_id":{"type":"long"},"keyword_name":{"type":"text","fields":{"keyword":{"type":"keyword"}}}}}}}添加两条数据,其中一条有多个keyword_name的值:POSTindex_study/game/1{"keyword_id":1,"keyword_name":"青叶"}POSTindex_study/game/2{"keyword_id":2,"keyword_name":["山河","姚"]}查询结果如下,GETindex_study/_search?q=*"hits":[{"_index":"index_study","_type":"游戏","_id":"2","_score":1.0,"_source":{"keyword_id":2,"keyword_name":["山河",""]}},{"_index":"index_study","_type":"game","_id":"1","_score":1.0,"_source":{"keyword_id":1,"keyword_name":"Aoba"}}]让我们谈谈文本和关键字类型我们在使用ES的时候经常会遇到这样一个问题:需要对下面的字段进行全文搜索,同时还需要对字段进行等值查询。如果单纯使用text类型,可以满足全文搜索的需求,但是text没有办法做等价匹配这时候需要使用字段来配置字段的使用场景:为一个字段配置mypointofsaletype类型以应对不同的查询场景,为一个字段配置多种分词规则以支持多种全文搜索规则索引示例可以参考index_study索引,查询时使用multi_match进行查询:GETindex_study/_search{"query":{"multi_match":{"query":"MountainandRiver","fields":["keyword_name","keyword_name.keyword"],"type":"most_fields"}}}参考文章:如何对es索引字段类型ES中的文本字段进行精确匹配
