Elasticsearch-数据建模实例
目录
什么是数据建模
数据建模: 功能需求 + 性能需求
如何对字段进行建模
字段类型
字段类型 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-数据建模实例相关推荐
- [转] [Elasticsearch] 数据建模 - 处理关联关系(1)
[Elasticsearch] 数据建模 - 处理关联关系(1) 标签: 建模elasticsearch搜索搜索引擎 2015-08-16 23:55 6958人阅读 评论(0) 收藏 举报 分类: ...
- 干货 | Elasticsearch 数据建模指南
0.题记 我在做 Elasticsearch 相关咨询和培训过程中,发现大家普遍更关注实战中涉及的问题,下面我选取几个常见且典型的问题,和大家一起分析一下. 订单表.账单表父子文档可以实现类似 SQL ...
- 数据仓库——维度数据建模实例
在这篇文章中,你将会学到如何一步步地进行维度数据建模,你将看到如何在真实的场景中使用维度模型. 什么是维度数据建模 维度数据建模是在进行数仓设计时的一种数据建模方法.这种建模方法的主要目标是为了提高数 ...
- UML建模之数据建模
一.数据库模简介 二.数据建模元素 1.表(Table) 2.表索引(Table Index) 3.表触发器(Table Trigger) 4.表约束(Table Constraint) 5.视图(V ...
- Elasticsearch之数据建模
数据建模 英文为 Data Modeling, 为创建数据模型的过程 数据模型(Data Model) - 对现实世界进行抽象描述的一种工具和方法 - 通过抽象的实体及实体之间联系的形式去描述业务规则 ...
- R语言 零基础入门教程第11章 Rattle可视化数据挖掘工具(1)Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例
关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料 本章内容 Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例 本章目标 了解Rattle的安装及 ...
- 阿里云大数据型实例规格族d1配置性能详解
阿里云大数据型实例规格族d1配置性能CPU.内存.适用场景.d1实例规格族,InstanceTypes分享大数据型实例规格族d1实例详解: 大数据型实例规格族d1配置特性 I/O优化实例 仅支持SSD ...
- 如何用机器学习方法进行数据建模?(文末福利)
本文节选自CCF大数据教材系列丛书之<大数据导论>,由中国科学院院士梅宏主编.本书系统地介绍大数据涵盖的内容,包括数据与大数据概述.大数据感知与获取.大数据存储与管理.大数据分析.大数据处 ...
- 5模型数据起别名_DMBOK 06|数据建模与设计
数记达摩院 提供高效能数据知识体系学习解决方案 您好,欢迎来到数记达摩院,我是王兵.今天我们来一起学习,DMBOK数据管理知识体系 第五章 数据建模与设计. 开始之前,我们先回顾一下上节课讲述的内容. ...
最新文章
- leetcode--移除元素--python
- 使用bitblt提高GDI+绘图的效率(转)
- Unity3D_(游戏)贪吃蛇
- 加强linux操作系统DNS服务安全
- BSS段 data段 text段 堆heap 和 栈stack
- vue 日期格式化返回指定个数月份_12、vue中日期格式化转换的函数
- linux httpd 开机启动脚本,httpd服务如何开机启动
- centos6.2系统下安装配置FastDFS步骤
- AI会“偷走”软件测试员的工作吗?只有技术强,才是硬道理!
- c++ mfc程序 屏幕只显示部分内容_Visual C++ MFC 简明教程
- RabbitMQ消息确认机制之Confirm模式总结
- vue3结合element-plus实现标签手动标注效果
- 关于计算机应用技术的创业策划书,创新创业项目计划书(双创博士)
- 如何在荣耀笔记本电脑上设置透明桌面便签?
- 随机森林回归简单示例
- 魔兽服务器优化,《魔兽世界》画质与流畅最佳优化指南
- aircrack安装并破解wifi
- php家长帮助家长方法,《正面管教》家长认证课堂招募|教你如何赢得孩子,而不是赢了孩子!...
- Java制作五子棋 V1.0
- Spring Actuator介绍及使用
热门文章
- YCbCr色彩空间 (笔记1)
- 骨传导耳机推荐哪款好,列举几款是市面上热销的骨传导耳机
- 陈皓的职业规划——CSDN对他的采访
- HDU1753—大明A+B(大正小数相加)
- Graph Anomaly Detection with Deep Learning——子图检测
- 12月21日——培训第27天
- JS variable hoisting
- easyExcel/poi导出文件Can not close IO,This archive contains unclosed entries
- 单基因gsea_单基因TCGA联合GEO干湿结合在胃癌中再发4分+
- 说程序员不懂浪漫?七夕节教你如何优雅告白