ElasticSearch数据建模

文章目录

    • 如何处理关联关系
    • 避免过多字段
    • 避免正则/通配符/前缀查询
    • 避免空值引起的聚合不准
    • 为索引的Mapping加入Meta 信息

如何处理关联关系

  • Object: 优先考虑反范式(Denormalization)

  • Nested: 当数据包含多数值对象,同时有查询需求

  • Child/Parent:关联文档更新非常频繁时



避免过多字段

  • 一个文档中,最好避免大量的字段

    • 过多的字段数不容易维护
    • Mapping 信息保存在Cluster State 中,数据量过大,对集群性能会有影响
    • 删除或者修改数据需要reindex
  • 默认最大字段数是1000,可以设置index.mapping.total_fields.limit限定最大字段数。·

在这里插入图片描述

思考:什么原因会导致文档中有成百上千的字段?

生产环境中,尽量不要打开 Dynamic,可以使用Strict控制新增字段的加入

  • true :未知字段会被自动加入
  • false :新字段不会被索引,但是会保存在_source
  • strict :新增字段不会被索引,文档写入失败

对于多属性的字段,比如cookie,商品属性,可以考虑使用Nested



避免正则/通配符/前缀查询

正则,通配符查询,前缀查询属于Term查询,但是性能不够好。特别是将通配符放在开头,会导致性能的灾难

案例:针对版本号的搜索,我们一般会对版本号进行模糊查询,优化方式将一个版本号字段变为保存Object对象类型,其实就是拆分为多个字段,

# 将字符串转对象
PUT softwares/
{"mappings": {"properties": {"version": {"properties": {"display_name": {"type": "keyword"},"hot_fix": {"type": "byte"},"marjor": {"type": "byte"},"minor": {"type": "byte"}}}}}
}#写入多个文档
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 } }]}}
}

在这里插入图片描述



避免空值引起的聚合不准

字段的值如果为null,那么就会导致对该字段进行聚合操作得到的结果不准确。因为聚合操作会把为null的文档忽略掉。

比如有5名学生,它们的成绩分别为100、null、null、99、98。此时如果计算平均值那么结果是(100+99+98)/3 ,但是我们期望的是(100+99+98+0+0)/5

我们可以在创建索引时,为这个字段指定 null_value 属性,如果为null就给一个默认值

DELETE scores
# 创建索引,未指定null_value
PUT /scores
{"mappings": {"properties": {"score": {"type": "float","null_value": 0}}}
}# 创建三个文档
PUT /scores/_doc/1
{"score":100}
PUT /scores/_doc/2
{"score":null}
PUT /scores/_doc/3
{"score":100}# 求平均值
POST /scores/_search
{"size": 5,"aggs": {"hs_avg": {"avg": {"field": "score"}}}
}

在这里插入图片描述

在这里插入图片描述

补充:

在这里插入图片描述



为索引的Mapping加入Meta 信息

  • Mappings设置非常重要,需要从两个维度进行考虑

    • 功能︰搜索,聚合,排序
    • 性能︰存储的开销; 内存的开销; 搜索的性能
  • Mappings设置是一个迭代的过程

    • 加入新的字段很容易(必要时需要update_by_query)
    • 更新删除字段不允许(需要Reindex重建数据)
    • 最好能对Mappings 加入Meta 信息,更好的进行版本管理
    • 可以考虑将Mapping文件上传git进行管理
PUT /my_index
{"mappings": {"_meta": {"index_version_mapping": "1.1"}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝塔面板如何修改域名和网站名

目录 前言修改域名修改网站名 前言 BT宝塔面板是一款安全高效的服务器运维平台,windows和Linux系统都可以使用,安装也简单,相信很多开发者都在用它。 但当我们创建的网站需要更换新的域名,面板中的网站名官方却没有给修改的地方&…

DETR论文,基于transformer的目标检测网络 DETR:End-to-End Object Detection with Transformers

transformer的基本结构: encoder-decoder的基本流程为: 1)对于输入,首先进行embedding操作,即将输入映射为向量的形式,包含两部分操作,第一部分是input embedding:例如,在NLP领域&…

动作捕捉与数字人实时交互实训室解决方案:赋能数字人微专业实践课程

随着近年来虚拟现实技术产业与元宇宙数字人产业不断发展,就业市场对元宇宙、影视动画、游戏、艺术创作、舞台特效、虚拟数字人、虚拟主播等行业具备相关技能人才的需求增加,面向数字媒体艺术设计、影视多媒体技术、广告设计与制作、电子商务、广播电视新…

【论文阅读】BoT-SORT: Robust Associations Multi-Pedestrian Tracking

题目:BoT-SORT: Robust Associations Multi-Pedestrian Tracking 作者:Nir Aharon* Roy Orfaig Ben-Zion Bobrovsky motivation: 作者来得很直接,就说他们用相机运动模型和优化卡尔曼做了个可以解决具有挑战的跟踪问题的算法:BOT-SORT;说他们…

Ubuntu22.04安卓编译环境搭建及so库编译

1.配置Android-ARM64开发环境工具链: vim ~/.profile 或者 ~/.bashrc 或者 /etc/profile 编辑环境变量文件 输入下面内容 export CROSS_TRIPLE=aarch64-linux-android export CROSS_ROOT=/usr/${CROSS_TRIPLE} export ANDROID_NDK=${CROSS_ROOT} export AS=${CROSS_ROOT}…

【人工智能】数据集合集!

本文将为您介绍10个经典、热门的数据集,希望对您在选择适合的数据集时有所帮助。 点击蓝字 关注我们 1 Habitat Platform 发布方: Facebook AI Research西蒙菲莎大学佐治亚理工学院Facebook Reality LabsIntel LabsUniversity of California, Berkeley…

20条项目经理成功经验,助你玩转项目管理软件

项目管理软件是现代项目管理不可或缺的工具,但仅仅掌握软件操作并不足以让你成为一名成功的项目经理。你需要的是经验和技巧,将软件的功能与实际项目管理相结合,才能真正发挥其优势。本文将分享20条项目经理成功经验,助你玩转项目…

基于华为atlas的皮带跑偏、空载、堆煤、启停探索

生乎吾前,其闻道也固先乎吾,吾从而师之;生乎吾后,其闻道也亦先乎吾,吾从而师之。吾师道也,夫庸知其年之先后生于吾乎?是故无贵无贱,无长无少,道之所存,师之所…

[C#]实现GRPC通讯的服务端和客户端实例

最近要做两个软件之间消息的通讯,学习了一下GRPC框架的通讯。根据官方资料做了一个实例。 官方资料请参考:Create a .NET Core gRPC client and server in ASP.NET Core | Microsoft Learn 开发平台:Visual Studio 2022 开发前提条件&#x…

图像识别,图片线条检测

import cv2 import numpy as np # 读取图片 img cv2.imread(1.png)# 灰度化 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 边缘检测 edges cv2.Canny(gray, 100, 200) 当某个像素点的梯度强度低于 threshold1 时,该像素点被认为是非边缘;当梯度强度…

达梦数据库版本介绍

达梦数据库根据不同用户的不同需求,提供了三种版本的数据库:DM Standard Edition 标准版、DM Enterprise Edition 企业版、DM Security Edition 安全版。那么这三种版本有什么区别,我们该如何选择合适的版本?下面先介绍三种版本各…

language model

1、language model(LM):估计token序列的可能性 2、对于HMM,固定需要P(Y)才符合公式;对于LAS,加上P(Y)能够使效果更好 P(Y|X)需要成对的数据,而P(Y)不需要成对,所以可以得到很多数据 …

【区块链+金融服务】港融区域股权服务平台 | FISCO BCOS应用案例

中国证监会在 2020 年启动了区块链建设试点工作,提出建设基于区块链的场外市场登记系统和交易报告库,利 用区块链去中心化、不易篡改、安全稳定等技术特点,构建区域性股权市场数字化信任机制,为区域性股权市场 提供基础支撑设施。…

Linux11

Linux运行级别 graphical.target图形化模式 runlevel查看运行级别 init 6自动重启 centos7单用户模式修改密码 Windows安全模式可用来删除木马,更为方便 单用户模式修改密码 选择第一个 按e键进入编辑模式,并完成以下修改(注意&#xff0…

Java爬虫中的数据清洗:去除无效信息的技巧

在互联网信息爆炸的时代,数据的获取变得异常容易,但随之而来的是数据质量的问题。对于Java爬虫开发者来说,如何从海量的网页数据中清洗出有价值的信息,是一个既基础又关键的步骤。本文将介绍Java爬虫中数据清洗的重要性&#xff0…

【C++】深入探索类和对象:初始化列表及其static成员与友元

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇 本章将分享C中类和对象最后章节“深入探索类和对象:初始化列表及其static成员与友元”,希望通过这几篇关于类和对象文…

Linux信号的概念信号的产生

前言 我们前面已经对进程已做了介绍!知道进程具有独立性,但在运行起来后可能会"放飞自我",即不受控制的执行,这就会导致系统崩溃等问题,非常不利于管理。因此OS需要一种机制来协调和控制进程的运行&#xf…

PHP多城市多门店多端平台健身系统小程序源码

🏋️‍♀️🌍 打造健身新纪元!多城市多门店多端平台健身系统全解析 🏃‍♂️ 🌐 开篇:跨越界限,健身无界 🌍 在快节奏的现代生活中,健身已成为越来越多人追求健康与美好…

家纺四件套入驻亚马逊VC的四大优势——WAYLI威利跨境助力商家

亚马逊VC平台为供应商提供了一个庞大的客户基础。亚马逊作为全球最大的在线零售商之一,拥有数以亿计的活跃用户,这为家纺四件套品牌商家带来了前所未有的市场机遇,也深刻影响着消费者的购物体验。 以下是四大核心优势: 1.流量与曝…

AWS域名注册服务:为您的在线业务打下坚实基础

在如今的数字时代,域名是每个在线业务的基础。一个好的域名不仅可以提升品牌形象,还能为用户提供便捷的访问体验。亚马逊网络服务(AWS)提供了强大的域名注册服务,帮助企业轻松获取和管理域名。我们九河云将深入探讨AWS…