25-Elasticsearch 数据建模实例

字段类型:Text v.s 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 的 enabled 为 false 时候使⽤

● Disable _source:节约磁盘;适⽤于指标型数据

⼀般建议先考虑增加压缩⽐

⽆法看到 _source字段,⽆法做 ReIndex,⽆法做Update

Kibana 中⽆法做 discovery

避免过多字段

● ⼀个⽂档中,最好避免⼤量的字段

  • 过多的字段数不容易维护
  • Mapping 信息保存在 Cluster State 中,数据量过⼤,对集群性能会有影响 (Cluster State 信息需要和所有的节点同步)
  • 删除或者修改数据需要 reindex

● 默认最⼤字段数是 1000,可以设置 index.mapping.total_fields.limt 限定最⼤字段数。

● 什么原因会导致⽂档中有成百上千的字段?

Dynamic v.s Strict

● Dynamic(⽣产环境中,尽量不要打开 Dynamic)

  • true - 未知字段会被⾃动加⼊
  • false - 新字段不会被索引。但是会保存在 _source
  • strict - 新增字段不会被索引,⽂档写⼊失败

● Strict

  • 可以控制到字段级别

通过 Nested 对象保存 Key/Value 的⼀些不⾜

● 可以减少字段数量,解决 Cluster State 中保存过多 Meta 信息的问题,但是

  • 导致查询语句复杂度增加
  • Nested 对象,不利于在 Kibana 中实现可视化分析

实现Filter 过滤,避免正则查询。

⼤⼤提升性能

避免空值引起的聚合不准

使⽤ Null_Value 解决空值的问题

为索引的 Mapping 加⼊ Meta 信息

● Mappings 设置⾮常重要,需要从两个维度进⾏考虑

  • 功能:搜索,聚合,排序
  • 性能:存储的开销;内存的开销;搜索的性能

● Mappings 设置是⼀个迭代的过程

  • 加⼊新的字段很容易(必要时需要 update_by_query)
  • 更新删除字段不允许(需要 Reindex 重建数据)
  • 最好能对 Mappings 加⼊ Meta 信息,更好的进⾏版本管理
  • 可以考虑将 Mapping ⽂件上传 git 进⾏管理


# Index 一本书的信息
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"
}#查询自动创建的Mapping
GET books/_mappingDELETE books#优化字段类型
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}}}
}DELETE books#新增 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}}}
}# Index 一本书的信息,包含Content
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":{}}}}

###### Cookie Service##索引数据,dynamic mapping 会不断加入新增字段
PUT cookie_service/_doc/1
{"url":"www.google.com","cookies":{"username":"tom","age":32}
}PUT cookie_service/_doc/2
{"url":"www.amazon.com","cookies":{"login":"2019-01-01","email":"xyz@abc.com"}
}DELETE cookie_service#使用 Nested 对象,增加key/value
PUT cookie_service
{"mappings": {"properties": {"cookies": {"type": "nested","properties": {"name": {"type": "keyword"},"dateValue": {"type": "date"},"keywordValue": {"type": "keyword"},"IntValue": {"type": "integer"}}},"url": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}
}##写入数据,使用key和合适类型的value字段
PUT cookie_service/_doc/1
{"url":"www.google.com","cookies":[{"name":"username","keywordValue":"tom"},{"name":"age","intValue":32}]}PUT cookie_service/_doc/2
{"url":"www.amazon.com","cookies":[{"name":"login","dateValue":"2019-01-01"},{"name":"email","IntValue":32}]}# Nested 查询,通过bool查询进行过滤
POST cookie_service/_search
{"query": {"nested": {"path": "cookies","query": {"bool": {"filter": [{"term": {"cookies.name": "age"}},{"range":{"cookies.intValue":{"gte":30}}}]}}}}
}# 在Mapping中加入元信息,便于管理
PUT softwares/
{"mappings": {"_meta": {"software_version_mapping": "1.0"}}
}GET softwares/_mappingPUT softwares/_doc/1
{"software_version":"7.1.0"
}DELETE softwares# 优化,使用inner object
PUT softwares/
{"mappings": {"_meta": {"software_version_mapping": "1.1"},"properties": {"version": {"properties": {"display_name": {"type": "keyword"},"hot_fix": {"type": "byte"},"marjor": {"type": "byte"},"minor": {"type": "byte"}}}}}
}#通过 Inner Object 写入多个文档
PUT softwares/_doc/1
{"version":{"display_name":"7.1.0","marjor":7,"minor":1,"hot_fix":0  }}PUT softwares/_doc/2
{"version":{"display_name":"7.2.0","marjor":7,"minor":2,"hot_fix":0  }
}PUT softwares/_doc/3
{"version":{"display_name":"7.2.1","marjor":7,"minor":2,"hot_fix":1  }
}# 通过 bool 查询,
POST softwares/_search
{"query": {"bool": {"filter": [{"match":{"version.marjor":7}},{"match":{"version.minor":2}}]}}
}DELETE ratings# Not Null 解决聚合的问题
PUT ratings
{"mappings": {"properties": {"rating": {"type": "float","null_value": 1.0}}}
}PUT ratings/_doc/1
{"rating":5
}PUT ratings/_doc/2
{"rating":null
}POST ratings/_searchPOST ratings/_search
{"size": 0,"aggs": {"avg": {"avg": {"field": "rating"}}}
}POST ratings/_search
{"query": {"term": {"rating": {"value": 1}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/16554.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

java中设计模式的使用(持续更新中)

概述 设计模式的目的:编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有…

linux基础io重定向

文章目录 目录 文章目录 前言 一、函数的认识 1、认识close函数和dup2函数 1、close函数: ​编辑 2、write、read函数 1、write函数 2、read函数 二、重定向 1.引入函数dup2 ​编辑 2、输出重定向 3.输出重定向 三、myshell重定向 总结 前言 接上一篇,…

[STM32] 定时器应用之输出比较 (五)

文章目录 1.输出比较2.PWM 介绍3.配置PWM 1.输出比较 OC: 输出比较。 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形。每个高级定时器和通用定时器都拥有4个输出比较通道高级定…

【计算机毕设】无查重 基于python豆瓣电影评论舆情数据可视化系统(完整系统源码+数据库+开发笔记+详细部署教程)✅

目录 【计算机毕设】无查重 基于python豆瓣电影数据可视化系统(完整系统源码数据库开发笔记详细部署教程)✅ 一、项目背景 二、项目目标 三、项目功能 四、开发技术介绍 五、数据库设计 六、项目展示 七、开发笔记 八、启动步骤文档 九、权威教…

后台管理系统窗体程序:个人中心

目录 个人中心的功能介绍: 1、进入页面 2、页面内的各种功能设计 (1)修改按钮 (2)页面的进入退出操作 一、网页设计 二、html代码 三、css代码 四、js代码 本次项目为后台管理系统,在本系统内的第七…

PLC如何支持GEM300标准?SECS/GEM通讯协议

1. 提供技术服务,保证户使用没问题 2. 支持市场所有的常规PLC 3. 支持常规组态软件,如wincc、组态王、组态屏等 4. 支持各类传感器,私有协议、modbus、web等 5. 无需二次开发,只需配置映射到已有的PLC地址 GEM300协议是为了满…

用 Google Sheets 表格增强 Tableau 数据分析的 3 种玩法

轻松实现文本翻译、网页数据抓取,甚至创建高级日期表来增强 Tableau 可视化效果! 作为一款强大的数据可视化工具,Tableau 的可视化能力毋庸置疑。然而,对于跟表格打交道的用户来说,它没有“创建表格”的功能&#xff0…

计算机网络 (3)计算机网络的性能

一、计算机网络性能指标 速率: 速率是计算机网络中最重要的性能指标之一,它指的是数据的传送速率,也称为数据率(Data Rate)或比特率(Bit Rate)。速率的单位是比特/秒(bit/s&#xff…

CAP与BASE分布式理论

CAP理论 C:Consistency 一致性:指强一致性,分布式系统中的所有节点在同一时刻具有同样的值、都是最新的数据副本,一致性保证了不管向哪台服务器写入数据,其他的服务器能实时同步数据 强一致性:写入数据的时…

【Java基础知识系列】之Java类的初始化顺序

前言 类的初始化顺序 简单场景 代码示例 public class Person {private String name initName();private String initName() {System.out.println("【父类】初始化实例变量name");return "【父类】史蒂夫";}private int age;private static int staticVa…

探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力

概述 心理健康是公共卫生最重要的领域之一。根据美国国家精神卫生研究所(NIMH)的数据,到 2021 年,22.8% 的美国成年人将患上某种形式的精神疾病。在全球范围内,精神疾病占非致命性疾病负担的 30%,并被世界…

解决 idea windows 设置maven离线模式之后,maven继续请求远程仓库

在内网开发的时候经常遇到没有办法来链接远程仓库的情况,这个时候需要设置maven的离线模式。 idea windows 设置maven离线模式之后,maven继续请求远程仓库 当设置完离线模式之后,有的时候执行maven的命令会报错,提示请求远程失败…

卷积神经网络 (CNN)

代码功能 网络结构: 卷积层: 两个卷积层,每个卷积层后接 ReLU 激活函数。 最大池化层用于降低维度。 全连接层: 使用一个隐藏层(128 个神经元)和一个输出层(10 类分类任务)。 数据集…

等保二级需要哪些安全设备?

在信息化高速发展的今天,服务器的安全性成为了企业乃至国家信息安全的重要基石。等保二级,作为信息安全等级保护制度中的一个关键环节,对服务器的安全防护提出了明确要求。本文将详细阐述服务器等保二级所需的各种安全设备,旨在为…

C++【深入项目-检测键盘】

神马是检测键盘,就是让编辑器可以检测键盘按下了什么按键,我们先科普复习检测键盘 。 检测键盘需要用到一些函数,请见下: ! KEY_DOWN( 80 ) 这个代码是检测按下键盘上P按键。那80是什么?原来是对应按键的&#xff0…

问题An object named ‘ResNetArcFace‘ was already registered in ‘arch‘ registry!

在安装 GFPGAN 的时候,一切都顺利,但是执行的时候出现了错误,哦还有一个问题, 问题一 就是如果basicsr安装不成功可以执行如下命令 pip install -i https://mirrors.aliyun.com/pypi/simple tb-nightly pip install -i https:/…

Leecode刷题C语言之最少翻转次数使二进制矩阵回文①

执行结果:通过 执行用时和内存消耗如下: 题目:最少翻转次数使二进制矩阵回文① 给你一个 m x n 的二进制矩阵 grid 。如果矩阵中一行或者一列从前往后与从后往前读是一样的,那么我们称这一行或者这一列是 回文 的。你可以将 grid 中任意格子…

K8S containerd拉取harbor镜像

前言 接前面的环境 K8S 1.24以后开始启用docker作为CRI,这里用containerd拉取 正文 vim /etc/containerd/config.toml #修改内容如下 #sandbox_image "registry.aliyuncs.com/google_containers/pause:3.10" systemd_cgroup true [plugins."io.…

三、计算机视觉_01图像的基本操作

0 前言 图像的读取和处理是计算机视觉领域中的一个基本任务,在Python中,有几个流行的库可以用来读取和处理图像数据 0.1 Matplotlib介绍 Matplotlib是Python中一个非常流行的绘图库,它通常用于数据可视化,虽然它不是专门的图像…

Liunx-Ubuntu22.04.1系统下配置Anaconda+pycharm+pytorch-gpu环境配置

这里写自定义目录标题 Liunx-Ubuntu22.04.1系统下配置Anacondapycharmpytorch-gpu环境配置一、Anaconda3配置1.Anaconda安装2.Anaconda更新3.Anaconda删除 二、pycharm配置1.pycharm安装 三、pytorch配置 Liunx-Ubuntu22.04.1系统下配置Anacondapycharmpytorch-gpu环境配置 一…