目录

什么是数据建模

数据建模: 功能需求 + 性能需求

如何对字段进行建模

字段类型

字段类型 Text VS Keyword

字段类型:结构化数据

搜索及分词

聚合及排序

额外的存储

一个数据建模的实例

优化字段设定

需求变更

查询图书:解决字段过大引发的性能问题

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_values / fielddata设置成false

  • 更新频繁,聚合查询频繁的keyword类型的字段

    • 推荐将eager_global_ordinals设置成true

额外的存储

  • 是否需要专门存储当前字段数据

    • Store设置成true,可以存储该字段的原始内容

    • 一般结合_source的enabl为false时候使用

  • Disable_source:节约磁盘(source的信息不需要在磁盘上做一个保存);适用于指标型数据(指标型文档不需要做任何的更新操作)

    • 一般先考虑增加压缩比

    • 无法看到_source字段,无法做Reindex,无法Update

一个数据建模的实例

优化字段设定

  • 图书索引

    • 书名:支持全文和精确匹配
    • 简介:支持全文
    • 作者:精确值
    • 发行日期:日期类型
    • 图书封面:精确值(因为没有必要对封面进行搜索所以可以有额外的设置:(1)如果index设置为false,不支持搜索,支持Terms聚合;(2)如果将enabled设为false,则无法进行搜索和聚合分析)

#添加数据,dynamic Mapping
PUT books/_doc/1
{
  "title": "Mastering ElasticSearch 5.0",
  "description": "Master the searching, indexing, and aggregation features in ElasticSearch Improve users’ search experience with Elasticsearch’s functionalities and develop your own Elasticsearch plugins",
  "author": "Bharvi Dixit",
  "public_date": "2017",
  "cover_url": "https://images-na.ssl-images-amazon.com/images/I/51OeaMFxcML.jpg"
}

#查看Maping
GET books/_mapping

#手动设置mapping:"index": false则不能通过该字段进行索引,数据还是会出现在_source中
PUT books
{
  "mappings": {
    "properties": {
      "author": {
        "type": "keyword"
      },
      "cover_url": {
        "type": "keyword",
        "index": false
      },
      "description": {
        "type": "text"
      },
      "public_date": {
        "type": "date"
      },
      "title": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 100
          }
        }
      }
    }
  }
}

#Cover URL index 设置成false,无法对该字段进行搜索
POST books/_search
{
  "query": {
    "term": {
      "cover_url": {
        "value": "https://images-na.ssl-images-amazon.com/images/I/51OeaMFxcML.jpg"
      }
    }
  }
}

#Cover URL index 设置成false,依然支持聚合分析
POST books/_search
{
  "aggs": {
    "cover": {
      "terms": {
        "field": "cover_url",
        "size": 10
      }
    }
  }
}

需求变更

  • 新需求:增加图书内容的字段.并要求被搜索同时高亮显示

  • 新需求会导致 _source 的内容过大(造成大量的存储空间的占用,数据在网络间传输的开销)

    • Source Filtering只是传输给客户端时进行过滤,Fetch数据时,ES节点还是会传输 _source中的数据

  • 解决办法

    • 关闭_source

    • 然后将每个字段的"store"设置成true(数据被额外的存储在ES当中)

查询图书:解决字段过大引发的性能问题

  • 返回结果不包含 _source字段

  • 对于需要显示的信息,可以在查询中指定"stored_fields"

  • 禁止_source字段后,还是支持使用highlightsAPI,高亮显示content中匹配的相关信息

#重现设定mapping文件,新增 Content字段。数据量很大。选择将Source 关闭
PUT books
{
  "mappings": {
    "_source": {
      "enabled": false
    },
    "properties": {
      "author": {
        "type": "keyword",
        "store": true
      },
      "cover_url": {
        "type": "keyword",
        "index": false,
        "store": true
      },
      "description": {
        "type": "text",
        "store": true
      },
      "content": {
        "type": "text",
        "store": true
      },
      "public_date": {
        "type": "date",
        "store": true
      },
      "title": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 100
          }
        },
        "store": true
      }
    }
  }
}

PUT books/_doc/1
{
  "title": "Mastering ElasticSearch 5.0",
  "description": "Master the searching, indexing, and aggregation features in ElasticSearch Improve users’ search experience with Elasticsearch’s functionalities and develop your own Elasticsearch plugins",
  "content": "The content of the book......Indexing data, aggregation, searching.    something else. something in the way............",
  "author": "Bharvi Dixit",
  "public_date": "2017",
  "cover_url": "https://images-na.ssl-images-amazon.com/images/I/51OeaMFxcML.jpg"
}

#查询结果中 source不包含数据
POST /books/_search

#搜索,通过store 字段显示数据,同时高亮显示 conent的内容
POST books/_search
{
  "stored_fields": ["title","author","public_date"],
  "query": {
    "match": {
      "content": "searching"
    }
  },

"highlight": {
    "fields": {
      "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的自动更新

Elasticsearch-数据建模实例相关推荐

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

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

  2. 干货 | Elasticsearch 数据建模指南

    0.题记 我在做 Elasticsearch 相关咨询和培训过程中,发现大家普遍更关注实战中涉及的问题,下面我选取几个常见且典型的问题,和大家一起分析一下. 订单表.账单表父子文档可以实现类似 SQL ...

  3. 数据仓库——维度数据建模实例

    在这篇文章中,你将会学到如何一步步地进行维度数据建模,你将看到如何在真实的场景中使用维度模型. 什么是维度数据建模 维度数据建模是在进行数仓设计时的一种数据建模方法.这种建模方法的主要目标是为了提高数 ...

  4. UML建模之数据建模

    一.数据库模简介 二.数据建模元素 1.表(Table) 2.表索引(Table Index) 3.表触发器(Table Trigger) 4.表约束(Table Constraint) 5.视图(V ...

  5. Elasticsearch之数据建模

    数据建模 英文为 Data Modeling, 为创建数据模型的过程 数据模型(Data Model) - 对现实世界进行抽象描述的一种工具和方法 - 通过抽象的实体及实体之间联系的形式去描述业务规则 ...

  6. R语言 零基础入门教程第11章 Rattle可视化数据挖掘工具(1)Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例

    关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料 本章内容 Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例 本章目标 了解Rattle的安装及 ...

  7. 阿里云大数据型实例规格族d1配置性能详解

    阿里云大数据型实例规格族d1配置性能CPU.内存.适用场景.d1实例规格族,InstanceTypes分享大数据型实例规格族d1实例详解: 大数据型实例规格族d1配置特性 I/O优化实例 仅支持SSD ...

  8. 如何用机器学习方法进行数据建模?(文末福利)

    本文节选自CCF大数据教材系列丛书之<大数据导论>,由中国科学院院士梅宏主编.本书系统地介绍大数据涵盖的内容,包括数据与大数据概述.大数据感知与获取.大数据存储与管理.大数据分析.大数据处 ...

  9. 5模型数据起别名_DMBOK 06|数据建模与设计

    数记达摩院 提供高效能数据知识体系学习解决方案 您好,欢迎来到数记达摩院,我是王兵.今天我们来一起学习,DMBOK数据管理知识体系 第五章 数据建模与设计. 开始之前,我们先回顾一下上节课讲述的内容. ...

最新文章

  1. leetcode--移除元素--python
  2. 使用bitblt提高GDI+绘图的效率(转)
  3. Unity3D_(游戏)贪吃蛇
  4. 加强linux操作系统DNS服务安全
  5. BSS段 data段 text段 堆heap 和 栈stack
  6. vue 日期格式化返回指定个数月份_12、vue中日期格式化转换的函数
  7. linux httpd 开机启动脚本,httpd服务如何开机启动
  8. centos6.2系统下安装配置FastDFS步骤
  9. AI会“偷走”软件测试员的工作吗?只有技术强,才是硬道理!
  10. c++ mfc程序 屏幕只显示部分内容_Visual C++ MFC 简明教程
  11. RabbitMQ消息确认机制之Confirm模式总结
  12. vue3结合element-plus实现标签手动标注效果
  13. 关于计算机应用技术的创业策划书,创新创业项目计划书(双创博士)
  14. 如何在荣耀笔记本电脑上设置透明桌面便签?
  15. 随机森林回归简单示例
  16. 魔兽服务器优化,《魔兽世界》画质与流畅最佳优化指南
  17. aircrack安装并破解wifi
  18. php家长帮助家长方法,《正面管教》家长认证课堂招募|教你如何赢得孩子,而不是赢了孩子!...
  19. Java制作五子棋 V1.0
  20. Spring Actuator介绍及使用

热门文章

  1. YCbCr色彩空间 (笔记1)
  2. 骨传导耳机推荐哪款好,列举几款是市面上热销的骨传导耳机
  3. 陈皓的职业规划——CSDN对他的采访
  4. HDU1753—大明A+B(大正小数相加)
  5. Graph Anomaly Detection with Deep Learning——子图检测
  6. 12月21日——培训第27天
  7. JS variable hoisting
  8. easyExcel/poi导出文件Can not close IO,This archive contains unclosed entries
  9. 单基因gsea_单基因TCGA联合GEO干湿结合在胃癌中再发4分+
  10. 说程序员不懂浪漫?七夕节教你如何优雅告白