ElasticSearch数据建模

news2024/11/24 22:50:11

文章目录

    • 如何处理关联关系
    • 避免过多字段
    • 避免正则/通配符/前缀查询
    • 避免空值引起的聚合不准
    • 为索引的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.coloradmin.cn/o/2045804.html

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

相关文章

SAP BAPI for Tcode SM12

注意:ENQUE_READ 和 ENQUE_READ2 的table ENQ是两个不同的结构 想通过 ENQUE_READ2 读取结构然后去删除 ENQUE_DELETE的 要注意不能直接用 要用 ENQUE_CONVERT_SEQG7_TO_SEQG3 进行转换 FUNCTION ENQUE_CONVERT_SEQG7_TO_SEQG3. *"-----------------------…

[000-01-030].第2节 :Zookeeper本地安装

1.Zookeeper下载地址 1.Zookeeper官网地址 2.会显示Zookeeper的一些版本 2.Zookeeper本地模式安装: 2.1.Zookeeper安装前准备 1.在Centos7虚拟机中安装jdk8 2.2.Zookeeper安装过程: 1.下载zookeeper压缩版本,解压放在opt/moduel目录下…

为啥90%设计师素材整理文件夹都是无效的?

大家好,今天我想和大家分享一下我在使用千鹿设计助手软件之前的图片管理经历,以及千鹿给我带来的巨大变化。 正文: 大家好,今天我想和大家分享一下我在使用千鹿软件之前的图片管理经历,以及千鹿给我带来的巨大变化。 …

netCDF文件预览(nc格式)

1.工具下载 软件下载:https://download.csdn.net/download/qq_34321590/89645482 2.java11环境安装 需要安装java11以上版本 安装包下载: https://download.csdn.net/download/qq_34321590/89645487 安装步骤: 1.解压 2.配置环境变量 在…

针对老年人的景区订票系统

TOC springboot303针对老年人的景区订票系统 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,…

RK3588 RTL8125BG调试

RTL8125B是一款PCIE转RJ45的网卡控制器芯片,在底层调试时只需配置PCIE即可 diff --git a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi index 798359eaf061..d8a7a43cdfa0 100755 --- a/arch/arm64/bo…

【学习笔记】Day 14

一、进度概述 1、《地震勘探原理》第七章 二、详情 地震波动力学是相对于运动学而言的。运动学主要研究波的传播规律,其主要特征是分析、研究波的传播路径。传播速度。旅行时间等。地震波动力学则主要从能量的角度研究地震波的特征,如波的振幅、波形、频…

比eagle还好用?设计师如何做好素材管理|设计源文件管理|Flux文生图|快搜索|高效应用

用Eagle的设计师朋友们,有没有遇到这样的问题?像PS工程文件必须要保存后,才能打标签。需要修改的时候,还要打开Eagle搜索再拖进来,属实有点麻烦。不过我觉得Eagle让我最难受的还是,它的素材有专门的文件结构…

如何利用R语言学习机器学习?

机器学习是近年来非常热门的一个学科,R 语言经过一段时间的发展也逐渐成为主流的编程语言之一。 机器学习是人工智能的一个分支,旨在通过构建和训练计算机算法和模型,使计算机能够 从数据中学习并自主进行决策和预测。传统的计算机程序是由开…

C++快速理解之泛型编程

1、引入 #include <iostream>using namespace std;int add(int a, int b) {return a b; }float add(float x, float y) {return x y; }int main() {int result add(3, 4);cout << "result " << result << endl;float result2 add(3.5…

智能分班结果自动发布系统

新学期&#xff0c;校园里又将迎来一批充满活力的新生。对于老师们来说&#xff0c;除了准备教学计划和课程内容&#xff0c;还有一项看似简单却颇为繁琐的任务——发布分班。传统的分班信息发布方式&#xff0c;通常是老师们一个个私信给学生家长&#xff0c;家长们收到信息后…

【图像特效系列】图像滤镜特效的实践 | 包含代码和效果图

目录 一 滤镜特效 1 代码 2 效果图 图像特效系列主要是对输入的图像进行处理,生成指定特效效果的图片。图像素描特效会将图像的边界都凸显出来;图像怀旧特效是指图像经历岁月的昏暗效果;图像光照特效是指图像存在一个类似于灯光的光晕特效,图像像素值围绕光照中心点呈圆…

InternLM2_PracticalCamp_L1_rask4_llamaindex+Internlm2 RAG实践

1. 前置知识 正式介绍检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;技术以前&#xff0c;大家不妨想想为什么会出现这样一个技术。 给模型注入新知识的方式&#xff0c;可以简单分为两种方式&#xff0c;一种是内部的&#xff0c;即更新…

DNS查询过程与原理

目录 DNS1. DNS 是什么2. DNS 服务器3. 使用dig显示查询过程4. 域名的逐级查询5. 简述DNS解析www.baidu.com的过程 参考 DNS 1. DNS 是什么 DNS &#xff08;Domain Name System 的缩写&#xff09;是域名解析器&#xff0c;根据域名查出IP地址 2. DNS 服务器 DNS 服务器是一…

Leon黎明广州演唱会2024重磅官宣,10月26日倾情开唱!

径自奔流的时光中&#xff0c;总有些声音拥有超越时间的力量&#xff0c;弥合着世代更迭的图景&#xff0c;在一代又一代人的心中闪烁不息。在熠熠生辉的星河中&#xff0c;垂钓破晓时分的曙光&#xff0c;总有星辰会指引着我们相遇。 当千禧年的风吹过耳畔&#xff0c;记忆深…

在 ToolStrip 控件中使用工具提示

可以通过将控件的 ShowItemToolTips 属性设置为 true 来为所需的 ToolStrip 控件显示 ToolTip。 显示工具提示 将控件的 ShowItemToolTips 属性设置为 true。 ToolStrip.ShowItemToolTips 的默认值为 true&#xff0c;MenuStrip.ShowItemToolTips 和 StatusStrip.ShowItemTool…

基于HTML语言的环保网站的设计与实现

TOC springboot318基于HTML语言的环保网站的设计与实现 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&a…

如何选择有意义的B2B SEO关键词?

今天谈谈如何选择有意义的B2B SEO关键字目标&#xff0c;以及你可以在自己的关键字研究中采取的流程和步骤。B2B和我们通常看到的B2C营销类型有点不同。销售周期或实际做出购买决定所需的时间通常要长得多&#xff0c;这需要多个利益相关者的参与。个人将参与这个过程&#xff…

Redis远程字典服务器(4)—— string类型详解

目录 一&#xff0c;string基本情况 二&#xff0c;string命令详解 2.1 set命令选项 2.2 setnx&#xff0c;setex 2.3 incr&#xff0c;incrby 2.4 decr&#xff0c;decrby 2.5 append拼接 2.6 getrange获取 2.7 setrange修改 2.8 strlen获取长度 2.9 总结 三&…

迈威通信Wi-Fi无线交换机:让工业网络打破线缆束缚

随着《中国制造2025》等国家政策的推进&#xff0c;我国正在加速推动制造业向智能化和信息化转型升级。在这一背景下&#xff0c;工业互联网作为支撑智能制造的关键基础设施&#xff0c;其重要性愈发凸显。特别是在“万物互联”的今天&#xff0c;Wi-Fi不仅成为了日常生活的重要…