目录
什么是数据建模
-
数据建模,是创建数据模型的过程
-
数据建模是对真实世界进行抽象描述的一种工具和方法,实现对现实世界的映射.
-
博客/作者/用户评论
-
-
三个过程:概念模型=>逻辑模型=>数据模型(第三范式)
-
数据模型:结合具体的数据库,在满足业务读写性能等需求的前提下,确定最终的定义
-
-
数据建模: 功能需求 + 性能需求
如何对字段进行建模
字段类型 Text VS Keyword
-
Text
-
用于全文本字段,文本会被Analyzer分词
-
默认不支持聚合分析及排序.需要设置fielddata为true
-
-
Keyword
-
用于id,枚举及不需要分词的文本.例如电话号码,email地址,手机号码,邮政编码,性别等
-
适用于Filter(精确匹配),Sorting和Aggregations
-
-
设置多字段类型
-
默认会为文本类型设置成text,并且设置一个keyword的子字段
-
在处理认类语言时,通过增加"英文","拼音"和"标准"分词器,提高搜索结构
-
字段类型:结构化数据
-
数值类型
-
尽量选择贴近的类型.例如可以用byte,就不要用long
-
-
枚举类型
-
设置为keyword.即便是数字,也应该设置成keyword.获取更加好的性能
-
-
其他
-
日期 /布尔 / 地理信息
-
检索
-
如不需要检索,排序和聚合分析
-
Enable设置成false
-
-
如不需要检索
-
index设置成false
-
-
对需要检索的字段,可以通过如下配置,设定存储粒度
-
index_options /Norms : 不需要归一化数据时,可以关闭
-
聚合及分析
-
如不需要检索,排序和聚合分析
-
Enable设置成false
-
-
如不需要排序或者聚合分析功能
-
Doc_values / fielddata设置成false
-
-
更新频繁,聚合查询频繁的keyword类型的字段
-
推荐将eager_global_ordinals设置成true
-
额外的存储
-
是否需要专门存储当前字段数据
-
Store设置成true,可以存储该字段的原始内容
-
一般结合_source的enable为false时候使用
-
-
Disable_source:节约磁盘;适用于指标型数据
-
一般先考虑增加压缩比
-
无法看到_source字段,无法做Reindex,无法Update
-
一个数据建模的实例
图书的索引
-
书名
-
简介
-
作者
-
发行日期
-
图书封面
优化字段设定
-
index设置成false,不支持搜索,支持Terms聚合
-
如将"enabled"设置为false.则无法进行搜索和聚合分析
Demo
- Cover URL index 设置成false,无法对该字段进行搜索,依然支持聚合分析
需求变更
-
新需求:增加突图书内容的字段.并要求被搜索同时高亮显示
-
新需求会导致 _source 的内容过大
-
Source Filtering只是传输给客户端时进行过滤,Fetch数据时,ES节点还是会传输 _source中的数据
-
-
解决办法
-
关闭_source
-
然后将每个字段的"store"设置成true(数据被额外的存储在ES当中)
-
查询图书:解决字段过大引发的性能问题
-
返回结果不包含 _source字段
-
对于需要显示的信息,可以在查询中指定"stored_fields"
-
禁止_source字段后,还是支持使用highlightsAPI,高亮显示content中匹配的相关信息
Demo
- Index 一本书的信息,包含Content
- 查询结果中,Source不包含数据
- 搜索,通过store字段显示数据,同时高亮显示content的内容
Mapping字段的相关设置
Mapping parameters | Elasticsearch Guide [8.1] | Elastic
-
Enabled -设置成false,仅作存储,不支持搜索和聚合分析(数据保存在_source中)
-
index -是否被倒排索引,设置成false,无法被搜索,但还是支持aggregation,并出现在_source中
-
Norms -如果字段用来做过滤和聚合分析,可以关闭,节约存储
-
Doc_values -是否启用doc_values,用于排序和聚合分析
-
Field_data -如果要对text类型启用排序和聚合分析,fielddata需要设置成true
-
Store -默认不存储,数据默认存储在_source
-
Coerce -默认开启,是否开启数据类型的自动切换 (例如,字符串转数字)
-
Multifields 多字段特性
-
Dynamic -true / false /strict 控制Mapping的自动更新
一些相关的API
-
Index Template && Dynamic Template
-
根据索引的名字匹配不同的Mappings和Settings
-
可以在一个Mappings上动态的设定字段类型
-
-
Index Alias
-
无需停机,无需修改,即可进行修改
-
-
Update By Query & Reindex