Elasticsearch数据建模笔记
- 数据建模是创建数据模型的过程
- 数据模型是对真实世界进行抽象描述的一种工具和方法,实现对现实世界的映射
- 三个过程:概念模型=》逻辑模型=》数据模型
- 数据模型:结合具体的数据库,在满足业务读写性能等需求的前提下,确定最终定义
- 数据建模:功能需求+性能需求
- 逻辑模型(功能需求)
- 实体属性
- 实体之间的关系
- 搜索相关的配置
- 物理模型(性能需求)
- 索引模版
- 分片数量
- 索引Mapping
- 字段配置
- 关系处理
- 对字段进行建模

- 字段类型:
- 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_value/fielddata设置成false
- 更新频繁,聚合查询频繁的keyword类型的字段
- 推荐eager_global_ordinals设置为true
- 额外的存储
- 是否需要专门存储当前字段数据
- Disable _source:节约磁盘;适用于指标型数据
- 一般建议考虑增加压缩比
- 无法看到_source字段,无法ReIndex 无法Upadte
- Kibana中无法做discovery
- 最佳实践
- 建模建议一:如何处理关联关系

- 建模建议二:避免过多字段
- 一个文档中,最好避免大量的字段
- 过多的字段数不容易维护
- Mapping信息保存在Cluster State中,数据量过大,对集群性能会有影响(Cluster State信息需要和所有的节点同步)
- 删除或者修改数据需要reindex
- 默认最大字段数是1000,可以设置index.mapping.tatal_fields.limt限定最大字段数
- Dynamic vs Strict
- Dynamic(生产环境中,尽量不用打开Dynamic)
- true-未知字段会被自动加入
- false-新字段不会被索引。但是会保存在_source
- strict-新字段不会被索引,文档写入失败
- Strict
- 可以控制道字段级别
- Dynamic(生产环境中,尽量不用打开Dynamic)
- 当Dynamic设置为True,同时采用扁平化的设计且键值对过多会导致字段数量的膨胀,通过Nested对象保存key/value可以减少字段数量。
- 建模建议三:避免正则查询
- 通过 Inner Object避免低性能的正则匹配
{
"version":{
"display_name":"7.1.0",
"marjor":7,
"minor":1,
"hot_fix":0
}
}
- 建模建议四:避免空值引起的聚合不准确
- 使用Null_Value解决空值的问题
- 建模建议五:为索引的Mapping加入Meta信息便于管理
{
"mappings": {
"_meta": {
"software_version_mapping": "1.0"
}
}
}
Elasticsearch数据建模笔记的更多相关文章
- [转] [Elasticsearch] 数据建模 - 处理关联关系(1)
[Elasticsearch] 数据建模 - 处理关联关系(1) 标签: 建模elasticsearch搜索搜索引擎 2015-08-16 23:55 6958人阅读 评论(0) 收藏 举报 分类: ...
- Elasticsearch 数据建模指南
文章转载自:https://mp.weixin.qq.com/s/vSh6w3eL_oQvU1mxnxsArA 0.题记 我在做 Elasticsearch 相关咨询和培训过程中,发现大家普遍更关注实 ...
- ES 32 - Elasticsearch 数据建模的探索与实践
目录 1 什么是数据建模? 2 如何对 ES 中的数据进行建模 2.1 字段类型的建模方案 2.2 检索.聚合及排序的建模方案 2.3 额外存储的建模方案 3 ES 数据建模实例演示 3.1 动态创建 ...
- ElasticSearch 数据建模
公号:码农充电站pro 主页:https://codeshellme.github.io 通常在使用 ES 构建数据模型时,需要考虑以下几点: 字段类型 是否需要搜索与分词 是否需要聚合与排序 是否需 ...
- ElasticSearch——数据建模最佳实践
如何建模 mapping 设计非常重要,需要从两个维度进行考虑: 功能:搜索.排序.聚合 性能:存储的开锁.内存的开销.搜索的性能 mapping 注意事项: 加入新字段很容易(必要时需要 updat ...
- 论Elasticsearch数据建模的重要性
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484159&idx=1&sn=731562a ...
- Elasticsearch 6.x版本全文检索学习之数据建模
1.什么是数据建模. 答:数据建模,英文为Data Modeling,为创建数据模型的过程.数据模型Data Mdel,对现实世界进行抽象描述的一种工具和方法,通过抽象的实体及实体之间联系的形式去描述 ...
- head first python菜鸟学习笔记(第七章) ——web应用之为数据建模
问题1. #意思是从athletelist.py中导入AthleteListfrom athletelist import AthleteList 源程序代码 import pickle from a ...
- Cassandra数据建模
1. 概述 Apache Cassandra将数据存储在表中,每个表都由行和列组成.CQL(Cassandra查询语言)用于查询存储在表中的数据.Apache Cassandra数据模型基于查询并针 ...
随机推荐
- 基于phathomjs token 不定时无响应问题排查
问题描述 基于phathomjs的token池项目,基本原理是,打开淘宝页,获取匿名cookie,再由cookie中提取有效token,调用方通过该token获取淘宝数据 为方便基他人应用,封装了部分 ...
- HDU-6707-Shuffle Card(很数据结构的一道题)
题目传送门 sol1:拿到这题的时候刚上完课,讲的是指针.所以一下子就联想到了双向链表.链表可以解决卡片移动的问题,但是无法快速定位要移动的卡片,所以再开一个指针数组,结合数组下标访问的特性快速定位到 ...
- Angular开发者指南(五)服务
服务 AngularJS服务是使用依赖注入(DI)连接在一起的可替代对象. 可以使用服务在整个应用程式中整理和分享程式码. AngularJS服务有: 延迟初始化 - AngularJS只在应用程序组 ...
- Coupled model
常见的coupled models phase English paper WRF-Chem mechanism public data 一些重要的结论 干空气的状态方程 ECWMF驱动WRF 常见的 ...
- hashMap插入初始值
加了this. 就很容易看出来是使用了内部类和{}代码块 当然也可以把this去掉, 更简洁, 只是不能一眼看出来怎么初始化的 类似的可以做ArrayList ....的初始化
- java170道面试题汇总+详细解析
2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对 ...
- DB2数据库多行一列转换成 一行一列
在db2中遇到多行一列转为一行一列的需求时,用db2函数 LISTAGG可以实现该功能.语法如下: SELECT [分组的字段 ] , LISTAGG([需要聚合的字段名], ',') FRO ...
- 关于angular2跳路由防止页面刷新的做法(Angular2路由重载)
simpleReuseStrategy.ts // 创建重用策略 import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStr ...
- .js——alert()语句
在.js文件中,通过alert()语句可以生成弹出框,弹出框中的内容message部分可以是常量字符串,也可以是含有变量的字符串连接,下面举几个例子简要说明下: 1. 参数为常量字符串 alert(& ...
- 测试工程师不懂AI,还有未来吗?
阿里妹导读:近几年人工智能.机器学习等词漫天遍地,似乎有一种无AI,无研发,无AI,无测试的感觉.有人说:不带上"智能"二字,都不好意思说自己是创新.我们先暂且不评论对错,只探讨这 ...