当前位置: 首页 > article >正文

es-索引详解

在 Elasticsearch 中,**索引(Index)**是核心概念之一,类似于关系型数据库中的“表”。索引用于存储、组织和检索文档(Document)。以下是关于 Elasticsearch 索引的详细解析:


1. 索引的基本概念

  • 索引:一个索引是一个逻辑命名空间,用于存储具有相似结构的文档。例如,可以创建一个名为 products 的索引来存储所有产品信息。
  • 文档:文档是索引中的基本数据单元,以 JSON 格式存储。例如,一个产品文档可能包含 namepricedescription 等字段。
  • 类型(Type):在 Elasticsearch 6.x 及之前版本中,索引可以包含多个类型(类似于表)。但从 7.x 开始,类型已被弃用,每个索引只能包含一种类型(默认是 _doc)。
  • 分片(Shard):索引被划分为多个分片,分片是数据的物理存储单元。分片可以分布在不同的节点上,从而实现分布式存储和并行处理。
  • 副本(Replica):每个分片可以有多个副本,用于提高数据的可用性和容错性。

2. 索引的创建

es 支持动态映射(自动推断字段类型)和显式映射(手动定义字段类型)。

显式创建

PUT /products   
{"settings": {"number_of_shards": 3,"number_of_replicas": 2},"mappings": {"properties": {"name": { "type": "text" },"price": { "type": "float" },"description": { "type": "text", "analyzer": "english" },"extra": {"type": "text","index": false},"number" : {"type" : "keyword","null_value": "NULL"}}}   
}
  • 该索引名为 products,包含 3 个分片和 2 个副本。
  • 定义了5个字段:name(文本类型)、price(浮点类型)、description(文本类型,使用英文分词器)、extra(文本类型,不创建倒排索引)、number(keyword类型,通过NULL可筛选出没有手机号的文档)

筛选出number为空的文档

GET products/_search
{"query": {"match": {"number":"NULL"}}
}

动态创建(不建议)

POST /products/_doc/1   
{"name": "Laptop","price": 999.99,"description": "A powerful laptop for professionals."
}
  • Elasticsearch 会自动推断字段类型:name 和 description 为文本类型,price 为浮点类型。

动态创建的类型,与实际需要的类型可能不一致,不建议使用


3. 索引维护

查看索引

GET /products

删除索引

DELETE /products

4.索引的性能优化

  • 合理设置分片数量:分片数量过多会增加集群负担,过少会影响查询性能。
  • 使用副本提高可用性:副本可以提高数据的可用性和查询性能。
  • 优化映射:避免使用不必要的字段类型(如 keyword 用于大文本)。
  • 定期清理旧数据:使用索引生命周期管理(ILM)自动删除或归档旧数据

避免排序

将term、match转换成filter

使用score计算分数

GET /my_index/_search   
{"query": {"bool": {"must": [{ "term": { "status": "active" } },{ "match": { "description": "powerful laptop" } }]}}   
}

转换成不需要score计算分数

GET /my_index/_search   
{"query": {"bool": {"filter": [{ "term": { "status": "active" } },{ "match": { "description": "powerful laptop" } }]}}      
}      

优化排序与聚合

eager_global_ordinals 可以加速 排序、聚合

原理:global_ordinals全局序数是一种将字段值映射为连续整数的机制。例如,字段值 ["apple", "banana", "cherry"] 可能被映射为 [0, 1, 2]

默认情况下,全局序数是在查询时动态生成的。这意味着每次执行聚合或排序操作时,Elasticsearch 都需要遍历字段值并生成全局序数。

对于高基数字段(字段值种类多),生成全局序数可能会消耗大量时间和资源。

启用 eager_global_ordinals 时,Elasticsearch 会在索引刷新(Refresh)或段合并(Segment Merge)时预先生成全局序数

适用场景

  • 高基数字段
  • 频繁聚合或排序
  • 实时性要求高

缺点

  • 增加索引开销:在索引刷新或段合并时生成全局序数会增加 CPU 和内存开销。
  • 占用更多内存:全局序数需要存储在内存中,可能会增加内存使用量

启用eager_global_ordinals 

PUT /my_index   
{"mappings": {"properties": {"my_field": {"type": "keyword","eager_global_ordinals": true}}}   
}

避免不必要的字段类型

字段不创建索引

PUT /my_index   
{"mappings": {"properties": {"name": {"type": "text"},"metadata": {"type": "object","enabled": false},"description": {"type": "text","index": false}}}   
}

name 字段:正常索引,可以用于搜索。

metadata 字段:禁用整个对象的索引功能。

description 字段:禁用索引,无法用于搜索。

禁用索引后的字段特性

无法搜索:禁用索引的字段无法用于查询(如 matchterm 等)。

可以存储:字段的值仍然会存储在 _source 中,可以通过 _source 获取。

可以用于聚合:禁用索引的字段仍然可以用于聚合操作(如 termssum 等),性能会降低。

可以用于脚本:字段的值可以在脚本中使用。

禁用索引的适用场景

日志数据:某些字段(如原始日志)可能不需要搜索,但需要存储。

大文本字段:某些大文本字段(如文章内容)可能不需要搜索,但需要存储。

敏感数据:某些敏感数据(如密码、密钥)不需要索引,但需要存储。

注意事项

无法恢复索引:如果需要重新启用索引,必须重新创建索引或使用 reindex 

存储开销:禁用索引的字段仍然会占用存储空间,因为其值存储在 _source 中。

聚合性能:禁用索引的字段在聚合时可能会影响性能,因为需要从 _source 中提取数据。

不使用fielddata

索引的生命周期管理(ILM)

创建策略

PUT _ilm/policy/my_custom_policy   
{"policy": {"phases": {"hot": {"actions": {"rollover": {"max_size": "50GB","max_age": "30d"}}},"delete": {"min_age": "90d","actions": {"delete": {}}}}}
}

该策略定义了索引的生命周期:在 hot 阶段,当索引大小超过 50GB 或创建时间超过 30 天时,滚动到新索引;在 delete 阶段,当索引创建时间超过 90 天时,删除索引。

(场景:删除3年之前的数据)

 将策略绑定到索引

PUT /my_index   
{"settings": {"index.lifecycle.name": "my_custom_policy"}
}

验证是否生效

GET /my_index/_ilm/explain

其他

添加字段禁止自动创建倒排索引

dynamic的取值类型如下:

取值是否添加字段到映射是否存储字段数据是否抛出异常适用场景
true数据结构不固定,需要动态添加字段。
false数据结构固定,但需要存储未知字段。
strict--数据结构严格固定,不允许未知字段。

true: 默认,添加倒排索引、储存字段

false:只会存储字段

strict:不支持自动添加字段,需要手动维护

(建议:如果字段是动态的,需要自动映射,则使用true;否则使用strict。避免出现创建多余的映射现象。。原因:索引不容易修改,建议手动创建映射

 手动添加字段:

PUT /my_index/_mapping   
{"properties": {"age": { "type": "integer" }}
}

 

索引模板

相关文章:

es-索引详解

在 Elasticsearch 中,**索引(Index)**是核心概念之一,类似于关系型数据库中的“表”。索引用于存储、组织和检索文档(Document)。以下是关于 Elasticsearch 索引的详细解析: 1. 索引的基本概念 …...

SAP接口方式之HTTP请求发布Restful服务

SAP restful http 接口集中管理发布(SICF) 项目上有很多restful接口的需求,其中涉及到多个外围系统,就想着如何通过只发布一个服务,而不用通过Webservice,也不通过RFC方式,让个外围系统传入不同的报文,来决…...

Spark-TTS:基于大模型的文本语音合成工具

GitHub:https://github.com/SparkAudio/Spark-TTS Spark-TTS是一个先进的文本到语音系统,它利用大型语言模型(LLM)的强大功能进行高度准确和自然的语音合成;旨在高效、灵活、强大地用于研究和生产用途。 一、介绍 Sp…...

Netty基础—3.基础网络协议一

大纲 1.网络基础的相关问题总结 2.七层模型和四层模型 3.物理层(网线 光缆 01电信号) 4.数据链路层(以太网协议 网卡mac地址) 5.网络层(IP协议 子网划分 路由器) 6.传输层(TCP和UDP协议 Socket 端口) 7.应用层(HTTP协议 SMTP协议) 8.浏览器请求一个域名会发生什…...

【mysql】centOS7安装mysql详细操作步骤!

【mysql】centOS7安装mysql详细操作步骤!—通过tar包方式 需要 root 权限,使用 root 用户进行命令操作。 1. 查看 CentOS 版本 cat /etc/redhat-release2. 安装rpm包,以8为例 打开 MySQL 官方 yum 仓库网站,获取与当前 CentOS …...

大白话 Vue 中的keep - alive组件,它的作用是什么?在什么场景下使用?

大白话 Vue 中的keep - alive组件,它的作用是什么?在什么场景下使用? 什么是 keep-alive 组件 在 Vue 里,keep-alive 是一个内置组件,它就像是一个“保存盒”,能把组件实例保存起来,而不是每次…...

当量子计算遇上互联网安全:挑战与革新之路

当量子计算遇上互联网安全:挑战与革新之路 量子计算,一个被誉为下一次科技革命的前沿技术,正在以惊人的速度发展。这项技术以其超越经典计算机的计算能力,为科学、医药和物流等领域带来了颠覆性变革。然而,对于互联网…...

Unity 封装一个依赖于MonoBehaviour的计时器(上) 基本功能

灵感来自下面这本书的协程部分,因此我就自己尝试写了一个 我的新书Unity3D游戏开发(第3版) | 雨松MOMO程序研究院 如果你不知道什么是协程:unity保姆级教程之协同程序_unity协同-CSDN博客 一句话概括:协程就是单线程的异步操作,其作用于Unity的主线程 1…...

使用Nodejs基于DeepSeek加chromadb实现RAG检索增强生成 本地知识库

定义 检索增强生成(RAG)的基本定义 检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种结合了信息检索技术与语言生成模型的人工智能技术。RAG通过从外部知识库中检索相关信息,并将其作为提示&…...

笔试刷题专题(一)

文章目录 最小花费爬楼梯(动态规划)题解代码 数组中两个字符串的最小距离(贪心(dp))题解代码 点击消除题解代码 最小花费爬楼梯(动态规划) 题目链接 题解 1. 状态表示&#xff1…...

LeetCode977有序数组的平方

思路①:先平方,后快排,输出(基准元素,左小右大) 时间复杂度:O(nlogn) 思路②:双指针左右开弓,首先原数组已经是按照非递减顺序排序,那…...

React.js 基础与进阶教程

React.js 基础与进阶教程 React.js 是由 Facebook 开发的流行前端 JavaScript 库,专为构建用户界面(UI)设计,尤其适用于单页面应用(SPA)。它采用组件化开发模式,使 UI 结构更加清晰、可维护性更…...

网络变压器的主要电性参数与测试方法(4)

Hqst盈盛(华强盛)电子导读:网络变压器的主要电性参数与测试方法(4).. 今天我们继续来看看网络变压器的2个重要电性参数与它的测试方法: 1.反射损耗(Return loss&…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.1.1基于ES的语义搜索(BERT嵌入向量)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 基于Elasticsearch与BERT的语义搜索架构设计与实战1. 传统搜索的局限性与语义搜索的崛起1.1 关键词搜索 vs 语义搜索1.2 Elasticsearch向量检索演进历程关键版本特性对比 2.…...

Windows10 WSL又又又一次崩了 Docker Desktop - Unexpected WSL error

问题:Windows10 WSL又又又一次崩了 这回报错: 然后再打开WSL Ubuntu就卡住了,等很长时间没反应,就关掉了。 手动启动Docker Desktop,报错: An unexpected error occurred while executing a WSL comman…...

XMI(XML Metadata Interchange)和XML之间的关系

XMI(XML Metadata Interchange)和XML之间的关系可以从以下几个方面进行阐述: 一、定义与背景 XML: XML(eXtensible Markup Language)是一种标记语言,被设计用来传输和存储数据。它是一种自描述…...

《深度剖析:鸿蒙系统下智能NPC与游戏剧情的深度融合》

在游戏开发领域,鸿蒙系统的崛起为开发者们带来了前所未有的机遇与挑战。尤其是在开发基于鸿蒙系统的人工智能游戏时,实现智能NPC的行为逻辑与游戏剧情紧密结合,成为了打造沉浸式游戏体验的关键。 鸿蒙系统作为一款面向全场景的分布式操作系统…...

【前端基础】:HTML

超链接标签: a href: 必须具备, 表示点击后会跳转到哪个页面. target: 打开方式. 默认是 _self. 如果是 _blank 则用新的标签页打开 <a href"http://www.baidu.com">百度</a>链接的几种形式: 外部链接: href 引用其他网站的地址 <a href"http…...

JVM垃圾收集器合集

前言&#xff1a;JVM GC收集器的回顾与比较 JVM&#xff08;Java虚拟机&#xff09;中的垃圾收集器是自动管理内存的重要机制&#xff0c;旨在回收不再使用的对象所占用的内存空间。以下是JVM中几种常见的垃圾收集器的详细介绍&#xff1a; 一、新生代垃圾收集器 1.Serial收集…...

Sourcetree——使用.gitignore忽略文件或者文件夹

一、为何需要文件忽略机制&#xff1f; 1.1 为什么要会略&#xff1f; 对于开发者而言&#xff0c;明智地选择忽略某些文件类型&#xff0c;能带来三大核心优势&#xff1a; 仓库纯净性&#xff1a;避免二进制文件、编译产物等污染代码库 安全防护&#xff1a;防止敏感信息&…...

unity使用mesh 画图(1)

plane 圆 空心椭圆 椭圆 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class DrawMeshManager {static DrawMeshManager instance;public static DrawMeshManager Instance {get {if (instance ! null){retu…...

本地部署 OpenManus 保姆级教程(Windows 版)

一、环境搭建 我的电脑是Windows 10版本&#xff0c;其他的没尝试&#xff0c;如果大家系统和我的不一致&#xff0c;请自行判断&#xff0c;基本上没什么大的出入啊。 openManus的Git地址&#xff1a;https://github.com/mannaandpoem/OpenManus 根据官网的两种安装推荐方式如…...

视频推拉流:EasyDSS平台直播通道重连转推失败原因排查与解决

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 用户使用EasyDSS平台对直播通道进行转推&#xff0c;发现只要关闭…...

机器人领域专业名词汇总

1. 电机与驱动 电机类型 DC Motor&#xff08;直流电机&#xff09;&#xff1a;通过直流电源驱动的电机。Stepper Motor&#xff08;步进电机&#xff09;&#xff1a;通过脉冲信号控制旋转角度的电机。Servo Motor&#xff08;伺服电机&#xff09;&#xff1a;带有反馈控制的…...

成为超人 21:超人怎么学?技能的学习,如编程

成为超人 21&#xff1a;超人怎么学&#xff1f;技能的学习&#xff0c;如编程 ① 搞定全能自恋② 超人怎么学&#xff1f;③ 耐心怎么来&#xff1f; 宇树机器人王兴兴&#xff1a;奇迹也有算法&#xff0c;做成事没有那么难&#xff0c;就是把不可能三个字&#xff0c;拆解成…...

【科研绘图系列】python绘制分组点图(grouped dot plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据函数`generateRectBoxDF` 函数主要作用参数解释逻辑流程`nmfDotPlot` 函数主要作用参数解释逻辑流程画图1画图2画图3画图4介绍 【科研绘图系列】python绘制…...

Springfox、Springdoc和Swagger

Springfox、Swagger 和 Springdoc Springfox、Swagger 和 Springdoc 是用于在 Spring Boot 项目中生成API文档的工具&#xff0c;但它们之间有显著的区别和演进关系&#xff1a; 1.Swagger 简介 Swagger 是一个开源项目&#xff0c;旨在为 RESTful APIs 提供交互式文档。最…...

在Spring Boot项目中如何实现获取FTP远端目录结构

Java语言实现获取FTP远端目录结构的实现方式有多种,在Spring Boot 项目中,最简单和快速的方式就是使用Spring Integration 实现FTP相关的功能。 前言 本篇的示例和演示基于Windows 的FTP 服务,关于如何在Windows 开启FTP服务可以参考: Windows 如何开启和使用FTP服务 本…...

Flutter_学习记录_device_info_plus 插件获取设备信息

引入三方库device_info_plus导入头文件 import package:device_info_plus/device_info_plus.dart;获取设备信息的主要代码 DeviceInfoPlugin deviceInfoPlugin DeviceInfoPlugin(); BaseDeviceInfo deviceInfo await deviceInfoPlugin.deviceInfo;完整案例 import package…...

Java高频面试之集合-10

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;详解红黑树&#xff1f;HashMap为什么不用二叉树/平衡树呢&#xff1f; 一、红黑树&#xff08;Red-Black Tree&#xff…...