Elasticsearch 6.x版本全文检索学习之数据建模
1、什么是数据建模。
答:数据建模,英文为Data Modeling,为创建数据模型的过程。数据模型Data Mdel,对现实世界进行抽象描述的一种工具和方法,通过抽象的实体及实体之间联系的形式去描述业务规则,从而实现对现实世界的映射。
2、数据建模的过程。
答:第一步、概念模型,确定系统的核心需求和范围边界,设计实体和实体间的关系。
第二步、逻辑模型,进一步梳理业务需求,确定每个实体的属性,关系和约束等等。
第三步、物理模型,结合具体的数据库产品,在满足业务读写性能等需求的前提下确定最终的定义,如mysql、mongodb、elasticsearch等等。
3、Elasticsearch的数据建模,es是基于lucene以倒排索引为基础实现的存储体系,不遵循关系型数据库中的范式约定。
4、Elasticsearch的数据建模中Mapping字段的相关设置。
答:a、enabled,值包含true、false。仅存储,不做搜索或者聚合分析。
b、index,值包含true、false。是否构建倒排索引。
c、index_options,值包含docs、freqs、positions、offsets。存储倒排索引的哪些信息。
d、norms,值包含true、false。是否存储归一化相关参数,如果字段仅用于过滤和聚合分析,可以关闭。
e、doc_values,值包含true、false。是否启动doc_values,用于排序和聚合分析。
f、field_data,值为true、false。是否为text类型启动fielddata,实现排序和聚合分析。
g、store,值为true、false。是否存储该字段值。
h、corece,值为true、false。是否开启自动数据类型转换功能,比如字符串转为数字,浮点转为整型等等。
i、multifields多字段,灵活使用多字段特性来解决多样的业务需求。
j、dynamic,值为true、false、strict。控制mapping自动更新。建议为strict,或者false。
k、date_detection,值为true、false。是否自动识别日期类型。建议为false。
5、Mapping字段属性的设定流程。
答:第一步、是何种类型的字段。是日期类型还是字符串类型的。
第二步、是否需要检索字段。需要检索index设置true,否则设置为false。
第三步、是否需要排序和聚合分析。doc_values,是否启动doc_values,用于排序和聚合分析。
第四步、是否需要另行存储。store,是否存储该字段值。
6、Mapping字段属性的设定流程,是何种类型的。
答:a、字符串类型,需要分词则设定为text类型的,否则设置为keyword类型的。
b、枚举类型,基于性能考虑将其设定为keyword类型,即便该数据为整型。
c、数值类型,尽量选择铁近的类型,比如byte即可表事所有数值的时候,即选用byte,不要用long。
d、其他类型的,比如布尔类型,日期,地理位置数据等等。
7、Mapping字段属性的设定流程,是否需要检索。
答:a、完全不需要检索,排序,聚合分析的字段。enabled设置为false。
b、不需要检索的字段,index设置为false。
c、需要检索的字段,可以通过如下配置设定需要的存储粒度。index_options结合需要设定,norms不需要归一化数据时关闭即可。
8、Mapping字段属性的设定流程,是否需要排序和聚合分析。
答:不需要排序或者聚合分析功能。doc_values设定为false,fielddata设定为false。
9、Mapping字段属性的设定流程,是否需要另行存储。
答:是否需要专门存储当前字段的数据?store设定为true,即可以存储该字段的原始内容(与_source中的不相干关)。一般结合_source的enabled设定为false时候使用。
10、ES数据建模实例练习。创建博客文档blog_index。
查询博客blog_index_01的索引映射和分片,副本情况。 插入数据,然后根据指定字段进行查询。
简易的ES模型,如果博客新增了内容context字段。
url字段的store的值为true的时候,enabled的值不能设定为false。因为enabled的值设定为false,会将值存储到_source里面的。doc_values是不需要进行聚合分析的。
11、Elasticsearch关联关系处理,es不擅长处理关系型数据库中的关联关系,比如文章表blog与评论表comment之间通过blog_id关联,在es中可以通过如下两种手段变相解决。Nested Object、Parent/Child。
12、关联关系处理之Nested Object。Comments默认是Objetc Array类型,存储结果类型是对应的字段在一个括号里面。
使用nested object解决查询结果不符合要求的现象。
Nested Object Array的存储类型,nested object是独立存在的。即自己对应的字段在一个括号内。查询的结果如下所示:
13、关联关系处理之Parent/Child。Elasticsearch还提供了类似关系数据库中join的实现方式,使用join数据类型实现。
关联关系处理之Parent/Child。常见query语法包括如下几种。
a、parent_id返回某父文档的子文档。
b、has_child返回包含某子文档的父文档。
c、has_parent返回包含某父文档的子文档。
建议尽量选择使用Nested Object来解决问题。
14、Elasticsearch的Reindex,指重建所有数据的过程,一般发生在如下情况。
答:a、mappring设置变更,比如字段类型变化,分词器字段更新等等。
b、index设置变更,比如分片数更改等等。
c、迁移数据。
15、Elasticsearch提供了现成的API用于完成该工作。
答:a、_update_by_query在现有索引上重建。
b、_reindex在其他索引上重建。
数据重建的时候受源索引文档规模的影响,当规模越大的时候,所需时间越多,此时需要通过设定url参数wait_for_completion为false来异步执行,es以task来描述此类执行任务。es提供了task api来查看任务的执行进度和相关数据。
再牛逼的案例,理论,都没有官网的牛逼,下面贴一下,如何去官网学习。
找到这里,自己可以巴拉巴拉,看自己需要的版本,对应的知识点。
16、Elasticsearch数据建模的建议。
1)、数据模型版本管理,对Mapping版本管理。
包含在代码或者专门的文件进行管理,添加好注释,并加入git版本管理仓库中,方便回顾。为每个增加一个metadata字段,在其中维护一些文档相关的元数据,方便对数据进行管理。mapping版本,可以自行指定,比如每次更新mapping设置后,该version加1。
2)、防止字段过多。字段过多主要有如下的坏处。
难于维护,当字段成百上千的时候,基本很难有人能明确知道每个字段的含义。mapping的信息存储在cluster state里面,过多的字段会导致mapping过大,最终导致更新变慢。通过设置index.mapping.total_fields.limit可以限定索引中最大字段数,默认是1000。可以通过key/value的方式解决字段过多的问题,但并不完美。一般字段过多的原因是由于没有高质量的数据建模导致的,比如dynamic设置为true。也可以考虑拆分多个索引来解决问题。
![]()
作者:别先生
博客园:https://www.cnblogs.com/biehongli/
如果您想及时得到个人撰写文章以及著作的消息推送,可以扫描上方二维码,关注个人公众号哦。
Elasticsearch 6.x版本全文检索学习之数据建模的更多相关文章
- Elasticsearch 6.x版本全文检索学习之分布式特性介绍
1.Elasticsearch 6.x版本全文检索学习之分布式特性介绍. 1).Elasticsearch支持集群默认,是一个分布式系统,其好处主要有两个. a.增大系统容量,如内存.磁盘.使得es集 ...
- Elasticsearch 6.x版本全文检索学习之Search API
Elasticsearch 6.x版本全文检索学习之Search API. 1).Search API,实现对es中存储的数据进行查询分析,endpoind为_search,如下所示. 方式一.GET ...
- Elasticsearch 6.x版本全文检索学习之集群调优建议
1.系统设置要到位,遵照官方建议设置所有的系统参数. https://www.elastic.co/guide/en/elasticsearch/reference/6.7/setup.html 部署 ...
- Elasticsearch 6.x版本全文检索学习之倒排索引与分词、Mapping 设置
Beats,Logstash负责数据收集与处理.相当于ETL(Extract Transform Load).Elasticsearch负责数据存储.查询.分析.Kibana负责数据探索与可视化分析. ...
- Elasticsearch 6.x版本全文检索学习之聚合分析入门
1.什么是聚合分析? 答:聚合分析,英文为Aggregation,是es除搜索功能外提供的针对es数据做统计分析的功能.特点如下所示: a.功能丰富,提供Bucket.Metric.Pipeline等 ...
- ES 32 - Elasticsearch 数据建模的探索与实践
目录 1 什么是数据建模? 2 如何对 ES 中的数据进行建模 2.1 字段类型的建模方案 2.2 检索.聚合及排序的建模方案 2.3 额外存储的建模方案 3 ES 数据建模实例演示 3.1 动态创建 ...
- Elasticsearch全文检索学习
ElasticSearch官方网址:https://www.elastic.co ElasticSearch官方网址(中文):https://www.elastic.co/cn/ Elasticsea ...
- Elasticsearch 数据建模指南
文章转载自:https://mp.weixin.qq.com/s/vSh6w3eL_oQvU1mxnxsArA 0.题记 我在做 Elasticsearch 相关咨询和培训过程中,发现大家普遍更关注实 ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
随机推荐
- Jenkins + Docker + dockerfile-maven-plugin + Harbor CI/CD spring-boot项目的最轻量级配置
说明 本文只为方便日后查阅,记录一些关键性的步骤和踩坑的情况. dockerfile-maven-plugin构建镜像配置 <plugin> <groupId>com.spot ...
- SpringMVC深入浅出(一)
1.Springmvc是什么 是一个表现层框架,用于接受请求及参数,响应请求回显数据. 2.SpringMVC处理流程 SpringMVC流程 1. 用户发送请求至前端控制器DispatcherSe ...
- DFA最小化,语法分析初步
1.将DFA最小化:教材P65 第9题 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 语言:(01 | 10)*(01 | 10) 自动机图: DFA状态转换矩阵 ...
- python3内置函数回忆
1.数学运算类 # 1.数学运算类 # abs:计算绝对值 print(abs(-23)) # divmod,返回一个tuple,第一个值为商,第二个值为余数 print(divmod(10,4)) ...
- com.alibaba.fastjson和net.sf.json的区别
JSON有两种结构 json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构 1.对象:对象在js中表示为“{}”括起来的内容, ...
- go 中recover捕获异常
recover 仅在延迟函数 defer 中有效,在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果.重要的事再说一遍:仅当在一个defer函数中被完成时,调用recove ...
- Android8.1 源码修改之插入SIM卡默认启用Volte功能
前言 公用电话产品,插入SIM卡后要求自动打开Volte功能,即插即用,用完拔卡就走 实现 第一步 开关对应的代码 通过打印日志和全局查找,源码位置 vendor/mediatek/proprieta ...
- 日常工作中VBA代码积累
1.超链接地址提取 Function GetURL(rng As Range) As String On Error Resume Next GetURL = rng.Hyperlinks(1).Ad ...
- 3、netty第二个例子,使用netty建立客户端,与服务端通讯
第一个例子中,建立了http的服务器端,可以直接使用curl命令,或者浏览器直接访问. 在第二个例子中,建立一个netty的客户端来主动发送请求,模拟浏览器发送请求. 这里先启动服务端,再启动客户端, ...
- Fiddler常用设置
1.设置抓取HTTPS请求 勾选后弹窗添加证书确认框 点击yes后,弹出警告 点击是,成功添加证书 点击OK确认,设置成功了 成功抓取到HTTPS请求 2.自定义会话框,展示GET和POST请求 3. ...