0、引言

在关系型数据库如Mysql中,设计库表需要注意的是: 
1)需要几个表; 
2)每个表有哪些字段; 
3)表的主键及外键的设定——便于有效关联。 
表的设计遵守范式约束,考虑表的可扩展性,避免开发后期对表做大的改动。 
Mysql或者Oracle中,修改数据类型相对比较简单,通过命令行或者navicat、sqldeveloper等可视化工具直接修改。 
即便千万级别数据量,多等点时间,也能修改好。

而在Elasticsearch非关系型数据存储的搜索引擎中,设计表对应的就是Mapping的设计。 
且ES中一旦字段设定后,不能修改。 
当然,这也不是绝对的,可以通过新建索引,然后reindex将原有数据迁移到新索引。 
即便如此,还是建议:索引设计的前期,根据项目的需要设计好字段。如考虑如下的因素? 
1)字段的大小,考虑最大、最小的情况,如某一个字段超过1MB甚至更多; 
2)字段需不需要分词、全文检索、其他类型的检索; 
3)时间字段类型的设置,时间戳、UTC类型或者字符串类型; 
4) 字段需不需要聚合 
…….

这就引申出本文的内容,Elasticearch到底支持哪些数据类型?Elasticsearch如何进行数据选型? 
有没有直接拿来就用的Mapping万能模板。 
以上问题,本文一一透彻解答。

1、Elasticsearch数据类型有哪些?

2、Elasticsearch数据如何选型?

2.1 字符串类型选型

text类型作用:分词,将大段的文字根据分词器切分成独立的词或者词组,以便全文检索。 
适用:email内容、某产品的描述等需要分词全文检索的字段; 
不适用:排序或聚合(Significant Terms 聚合例外)

keyword类型:无需分词、整段完整精确匹配。 
适用于:email地址、住址、状态码、分类tags。

2.2 数值类型选型

long长整型:一个带符号的64位整数,最小值为 -263 ,最大值为 263 -1。 
integer 整数:一个带符号的32位整数,最小值为 -231 ,最大值为 231 -1。 
short 短整形:一个带符号的16位整数,最小值为-32,768,最大值为32,767。 
byte 字节型:一个带符号的8位整数,最小值为-128,最大值为127。 
double 双精度浮点型:双精度64位IEEE 754浮点数。 
float 单精度浮点型:单精度32位IEEE 754浮点数。 
half_float半精度浮点型:半精度16位IEEE 754浮点数。 
scaled_float:由长度固定的缩放因子支持的浮点数。 
以上,根据长度选型即可。

2.3 日期类型选型

{ “date”: “2015-01-01” } 
{ “date”: “2015-01-01T12:10:30Z” } 
{ “date”: 1420070400001 } 
如上,日期类型或者时间戳类型。

参考模板: 
“date”: { 
“type”: “date”, 
“format”: “yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis” 
}

2.4 布尔类型选型

布尔字段接受JSON true和false值,但也可以接受被解释为true或false的字符串和数字: 
false值举例: 
false,“false”,“off”,“no”,“0”,“”(空字符串),0,0.0 
true值举例: 
以上false示例的反面,一切非假值。

2.5 二进制类型选型

二进制类型接受二进制值作为Base64编码字符串。 该字段默认情况下不存储,不可搜索: 
如: “blob”: “U29tZSBiaW5hcnkgYmxvYg==”

2.6 范围类型选型

integer_range :整型范围类型; 
float_range :单精度浮点范围类型; 
long_range :长整型范围类型; 
double_range :双精度范围类型; 
date_range :时间范围类型; 
ip_range :IP范围类型。 
以上,根据类型&范围需要选型即可。

2.7 数组类型选型

2.7.1 Array数组类型选型

在Elasticsearch中,没有专门的数组类型。 
默认情况下,任何字段都可以包含零个或多个值,但是数组中的所有值必须是相同的数据类型。 例如: 
字符串数组: [ “one”, “two” 
整数数组:[1,2] 
阵列数组:[1,[2,3]],相当于[1,2,3] 
一系列对象数组:[{“name”:“Mary”,“age”:12},{“name”:“John”,“age”:10}] 
可以理解为单类型扩展多个值的类型。 
如果需要根据数组值进行查询操作,官网建议使用nested嵌套类型。

数组类型:没有明显的字段类型设置,任何一个字段的值,都可以被添加0个到多个,当类型一直含有多个值存储到ES中会自动转化成数组类型 
对于数组类型的数据,是一个数组元素做一个数据单元,如果是分词的话也只是会依一个数组元素作为词源进行分词,不会是所有的数组元素整合到一起。 
在查询的时候如果数组里面的元素有一个能够命中那么将视为命中,被召回。

2.7.2 Object对象类型

JSON文档本质上是分层的: 存储类似json具有层级的数据,文档可能包含内部对象,而内部对象又可能包含其他内部对象。

PUT my_index/my_type/1
{"region": "US","manager": {"age": 30,"name": {"first": "John","last": "Smith"}}
}

这和Json类型的初衷是一致的。 
访问方式举例: “manager.name.last”: “Smith”。

2.7.3 nested嵌套类型

nested 嵌套类型是Object数据类型的特定版本,允许对象数组彼此独立地进行索引和查询。 
一个例子,自然就明白了:

PUT my_index
{"mappings": {"my_type": {"properties": {"user": {"type": "nested"}}}}
}PUT my_index/my_type/1
{"group" : "fans","user" : [{"first" : "John","last" : "Smith"},{"first" : "Alice","last" : "White"}]
}GET my_index/_search
{"query": {"nested": {"path": "user","query": {"bool": {"must": [{ "match": { "user.first": "Alice" }},{ "match": { "user.last": "Smith" }}]}}}}
}

能完成嵌套查询&检索,对于非一对一关系的字段适用。 
在ElasticSearch内部,嵌套的文档(Nested Documents)被索引为很多独立的隐藏文档(separate documents),这些隐藏文档只能通过嵌套查询(Nested Query)访问。每一个嵌套的文档都是嵌套字段(文档数组)的一个元素。 
嵌套文档的内部字段之间的关联被ElasticSearch引擎保留,而嵌套文档之间是相互独立的。 
默认情况下,每个索引最多创建50个嵌套文档,可以通过索引设置选项:index.mapping.nested_fields.limit 修改默认的限制。

2.8 IP类型

存储IPV4或IPV6地址。 
如: “ip_addr”: “192.168.1.1”

2.9 completion suggester类型

suggester类型对应 suggester检索,完成自动补全。

2.10 令牌计数类型

类型为token_count的字段实际上是一个接受字符串值的整数字段,对它们进行分析,然后对字符串中的令牌数进行索引。

……..

3、Elasticsearch万能Mapping模板。

以下模板,已验证好用。

PUT testinfo_index{"mappings": {"testinfo_type": {"properties": {"id": {"type": "long"},"title": {"type": "keyword"},"content": {"analyzer": "ik_max_word","type": "text","fields": {"keyword": {"ignore_above": 256,"type": "keyword"},"available": {"type": "boolean"},"review": {"type": "nested","properties": {"nickname": {"type": "text"},"text": {"type": "text"},"stars": {"type": "integer"}}},"publish_time": {"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"},"expected_attendees": {"type": "integer_range"},"ip_addr": {"type": "ip"},"suggest": {"type": "completion"}}}}}}
}

Elasticsearch5.X Mapping万能模板相关推荐

  1. Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)

    from: Makefile常用万能模板(包括静态链接库.动态链接库.可执行文件) 本文把makefile 分成了三份:生成可执行文件的makefile,生成静态链接库的makefile,生成动态链接 ...

  2. 推荐:万能模板,十分钟打造电商首焦Banner

    兵贵神速,老板恨不得我们一分钟出图,那么这些思路和手法绝对是值得借鉴的. 在首焦的设计呈现上,很多的技巧与方式方法都是组合应用的. 但是电商日常促销化的业态,设计师手里没有万能模板的储备,也是叫苦不迭 ...

  3. 电商促销活动那么多,美工需要炫酷海报万能模板!可套用!救急必备!

    快消费的时代,促销每天都有新花样. 对于电商而言美工每天都要苦恼宣传海报怎么快速出稿! 炫酷海报万能模板!可套用!救急必备!临摹版素材,好处就是可以直接使用,也可以下载psd源文件按需修改图片和文字, ...

  4. echarts 大屏模板_年会策划万能模板 ,玩转年会看这篇!

    原标题:年会策划万能模板 ,玩转年会看这篇! 临近年末,活动策划人的年度大考又要来了,如何做一场让老板满意,员工舒心的策划呢? 这里小编分享一套年会策划的万能模板,玩转年会! 致辞: 20xx年即将到 ...

  5. 英语议论文万能模板范文 英语作文范文欣赏

    英语议论文万能模板范文 英语作文范文欣赏 英语作文是可以提前积累一些模板的,在考试的时候套用这些句型,可以提高写作速度,也可以确保句式的准确性.下面是英语议论文的万能模板及范文,速看!英语议论文万能模 ...

  6. python实训报告万能模板_(完整word版)实训报告万能模板

    实训报告万能模板 "纸上得来终觉浅,绝知此事要躬行 ! "在这短短的时间里,让 我深深的感觉到自己在实际应用中所学专业知识的匮乏. 让我真真领 悟到"学无止境" ...

  7. 计算机中的英语六级作文万能模板,英语六级作文的通用万能模板

    第一部分记叙文题型作文diy 写作步骤 要求考生写一篇记叙文,描述事件发生的时间.地点.原因.人物及结果,最后对事件进行简单分析,如:2003年6月四级作文.2003年9月四级作文.2004年6月六级 ...

  8. 计算机中的英语六级作文万能模板,英语六级作文万能模板句子

    英语六级作文万能模板句子 导语:作文在六级考试中作为创新应用类题型,虽然发挥范围比较广,但是要想获得高分,快速提分,还是需要点面结合,下面是小编整理的英语六级作文万能句子,希望对你有帮助! 开篇 1) ...

  9. matplotlib绘制饼图之基本配置——万能模板案例

    目录 饼图的概念 连接数据库绘制饼图案例(pandas画图) 显示百分比 饼图常见参数 扇区分离饼图 添加颜色 添加阴影 显示百分比 控制起始角度 将饼图放置在坐标轴 双饼图显示 饼图万能模板 每文一 ...

最新文章

  1. python【数据结构与算法】一种时间复杂度和空间复杂度的计算方法
  2. golang中的base64
  3. 赵雅智:service_startService生命周期
  4. android点击地址调用地图,Android 实现点击按钮 调用手机外部地图导航
  5. python颜色表_数据库表连接的简单解释 | 图文并茂,通俗易懂
  6. Nginx配置wss访问实现微信小程序的websocket通信
  7. 越来越难?这届开发者学不会的计算机理论
  8. 如何增加虚拟机ubuntu的硬盘
  9. 微信小程序如何使用阿里巴巴矢量图标库彩色图标
  10. centos yum源配置
  11. 下载网页上的各种视频只需四步
  12. 十个高质量工具网站推荐,AI自动抠图换背景,任意背景自动融合
  13. 黑盒测试与白盒测试的定义与区别
  14. 浅析 BloomFilter
  15. 英语记忆软件测试大乐,6款优质育儿APP测评推荐:听故事、学外语,寓教于乐,带娃不再累!...
  16. 赚下跌的钱!基金定投也能成千万富翁
  17. 零拷贝(Zero Copy)技术
  18. 《金属切削原理》教学大纲
  19. 【论文笔记】SCOAT-Net: A novel network for segmenting COVID-19 lung opacification from CT images
  20. 将Excel表的数据导入mysql

热门文章

  1. maven依赖 spark sql_使用Kafka+Spark+Cassandra构建实时处理引擎
  2. Web应用_Tomcat部署及优化
  3. oracle json字符串转数组,json字符串转化成json对象(原生方法)
  4. 利用JNative实现Java调用动态库
  5. oracle触发器不允许修改数据库,Oracle数据库使用触发器记录表数据修改记录
  6. 查询除了一列意外_想让你的查询语句变快吗?
  7. vs2010 asp.net mysql,安装VS2010后,更改iis的asp.net版本 | 吴小强的博客
  8. android多条件查询数据,Android GreenDao 条件查询问题
  9. Django模型自定义查询管理器
  10. (六) shiro在web中自定义Realm