数据建模
  • 数据建模是创建数据模型的过程
    • 数据模型是对真实世界进行抽象描述的一种工具和方法,实现对现实世界的映射
    • 三个过程:概念模型=》逻辑模型=》数据模型
      • 数据模型:结合具体的数据库,在满足业务读写性能等需求的前提下,确定最终定义
  • 数据建模:功能需求+性能需求
    • 逻辑模型(功能需求)
      • 实体属性
      • 实体之间的关系
      • 搜索相关的配置
    • 物理模型(性能需求)
      • 索引模版
        • 分片数量
      • 索引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设置为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"
}
}
}
Mapping字段的相关设置
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html
 

Elasticsearch数据建模笔记的更多相关文章

  1. [转] [Elasticsearch] 数据建模 - 处理关联关系(1)

    [Elasticsearch] 数据建模 - 处理关联关系(1) 标签: 建模elasticsearch搜索搜索引擎 2015-08-16 23:55 6958人阅读 评论(0) 收藏 举报 分类: ...

  2. Elasticsearch 数据建模指南

    文章转载自:https://mp.weixin.qq.com/s/vSh6w3eL_oQvU1mxnxsArA 0.题记 我在做 Elasticsearch 相关咨询和培训过程中,发现大家普遍更关注实 ...

  3. ES 32 - Elasticsearch 数据建模的探索与实践

    目录 1 什么是数据建模? 2 如何对 ES 中的数据进行建模 2.1 字段类型的建模方案 2.2 检索.聚合及排序的建模方案 2.3 额外存储的建模方案 3 ES 数据建模实例演示 3.1 动态创建 ...

  4. ElasticSearch 数据建模

    公号:码农充电站pro 主页:https://codeshellme.github.io 通常在使用 ES 构建数据模型时,需要考虑以下几点: 字段类型 是否需要搜索与分词 是否需要聚合与排序 是否需 ...

  5. ElasticSearch——数据建模最佳实践

    如何建模 mapping 设计非常重要,需要从两个维度进行考虑: 功能:搜索.排序.聚合 性能:存储的开锁.内存的开销.搜索的性能 mapping 注意事项: 加入新字段很容易(必要时需要 updat ...

  6. 论Elasticsearch数据建模的重要性

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484159&idx=1&sn=731562a ...

  7. Elasticsearch 6.x版本全文检索学习之数据建模

    1.什么是数据建模. 答:数据建模,英文为Data Modeling,为创建数据模型的过程.数据模型Data Mdel,对现实世界进行抽象描述的一种工具和方法,通过抽象的实体及实体之间联系的形式去描述 ...

  8. head first python菜鸟学习笔记(第七章) ——web应用之为数据建模

    问题1. #意思是从athletelist.py中导入AthleteListfrom athletelist import AthleteList 源程序代码 import pickle from a ...

  9. Cassandra数据建模

    1.  概述 Apache Cassandra将数据存储在表中,每个表都由行和列组成.CQL(Cassandra查询语言)用于查询存储在表中的数据.Apache Cassandra数据模型基于查询并针 ...

随机推荐

  1. Python之configparser配置文件的读取

    配置文件名 config.ini 文件内容: [linux] ip:10.0.13.26 port:22 username:root password:W2ynE6b58wheeFho [mysql] ...

  2. HDU-2802-F(N)

    看到这题讨论版里有说用公式的有说用循环节的,但是个人觉得这两种方法都不靠谱,比赛场上做这种题能直接推出公式需要很强数学功底,而循环节的方法如果循环节比较大就不太好发现了.这种已知通项公式的题还是用矩阵 ...

  3. iOS(Swift)学习笔记之去除UINavigationBar下方横线

    本文为原创文章,转载请标明出处 // 去除UINavigationBar下方横线 navigationController.navigationBar.shadowImage = UIImage() ...

  4. LG承认手机业务遭到中国厂商碾压!这是输得心服口服的节奏?

    近日,关于LG手机业退出中国市场的消息传的沸沸洋洋.不少相关媒体也对此事向LG北京办事处求证,得到的结果确实是手机业务退出中国市场.并且据韩媒报道,LG还将会逐渐取消高端手机业务,也就是说未来V系列和 ...

  5. bp(net core)+easyui+efcore实现仓储管理系统——入库管理之二(三十八)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  6. Flash之后是不是该IE浏览器了

    Flash死亡,Adobe推荐大家拥抱HTML5. 其实Flash本身也是支持手机端的. 一.Flash宣告死亡 Adoebe官方网站发布了公告,2020年12月30日起终止支援Flash.目前Chr ...

  7. Channel Estimation for High Speed Wireless Systems using Gaussian Particle Filter and Auxiliary Particle Filter

    目录 论文来源 摘要 基本概念 1.时变信道 2.粒子滤波 3.高斯粒子滤波 4.辅助粒子滤波 比较 借鉴之处 论文来源 International Conference on Communicati ...

  8. 基于Blazor写一个简单的五子棋游戏

    写这个五子棋游戏,其实主要目的是想尝试一下微软新作Blazor.Blazor对于那些搞.NET的程序员,又想做一些前端工作,真的挺友好,不用一句JS就可搞定前端交互,美哉.现在已经有很流行的前端框架, ...

  9. 线程状态,BLOCKED和WAITING有什么区别

    线程可以通过notify,join,LockSupport.park方式进入wating状态,进入wating状态的线程等待唤醒(notify或notifyAll)才有机会获取cpu的时间片段来继续执 ...

  10. Apple App签名机制

    概览 数字签名 签名机制与验证过程 操作流程 数字签名 摘要算法 将任意长度文本通过一个算法得到一个固定长度的文本. 源文本不同,计算结果必然不同 无法从结果反推源 例如,MD5和SHA算法 非对称加 ...