ElasticSearch 学习、实践笔记

一、基础概念

1. 索引(Index):索引是 Elasticsearch 中最基本的数据存储单位,类似于关系型数据库中的数据库。一个索引可以包含多个文档,每个文档都有一个唯一的 ID,用于标识该文档。索引可以被分为多个分片,每个分片可以存储一部分文档数据。

 2. 文档(Document):文档是 Elasticsearch 中的基本数据单元,类似于关系型数据库中的行。每个文档都有一个唯一的 ID,用于标识该文档。文档可以包含多个字段,每个字段都有一个数据类型,例如字符串、数字、日期等。

3. 分片(Shard):分片是 Elasticsearch 中的数据分布方式,用于将索引分成多个部分,每个部分可以存储一部分文档数据。分片可以被分配到不同的节点上,以实现数据的分布式存储和查询。

4. 节点(Node):节点是 Elasticsearch 中的一个实例,它可以存储一部分数据和处理查询请求。一个节点可以属于一个或多个集群,每个集群可以包含多个节点。节点之间可以通过网络通信来协调数据的存储和查询。

架构是分布式的,它将数据分成多个分片存储在不同的节点上,通过网络通信来协调数据的存储和查询。这种架构可以实现高可用性、高性能和可扩展性。

二、创建索引

1.在客户端调用API创建索引(.NET CORE[c#])

/// <summary>
/// 如果索引不存在就创建
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public async Task CreateIndexIfNotExist<ESEntity>(string index)where ESEntity: ESBase,new ()
{if (index.IsNullOrEmpty()){return;}//指定分片数量IIndexState indexState = new IndexState{Settings = new IndexSettings{NumberOfReplicas = 0,  NumberOfShards = 5 } };//自动映射 + 指定属性映射//https://blog.csdn.net/WuLex/article/details/71375032Func<CreateIndexDescriptor, ICreateIndexRequest> func = x => x.InitializeUsing(indexState).Map<ESEntity>(m => m.AutoMap().Properties(ps => ps.Nested<ESContent>(n => n.Name(c => c.Contents).AutoMap().Properties(ps => ps.Nested<ESFileContent>(n => n.Name(c => c.FileContents).AutoMap())))));var response = await Client.Indices.CreateAsync(index, func);if (response != null && response.ApiCall != null && response.ApiCall.DebugInformation.IsNotNullOrEmpty()){if (!response.ApiCall.Success){Logger.LogInformation($"创建索引:{response.DebugInformation}"); }}}

2.直接执行 json脚本创建

PUT /my_index
{"settings": {"number_of_shards": 1,"number_of_replicas": 1},"mappings": {"properties": {"title": {"type": "text"},"description": {"type": "text"},"price": {"type": "float"},"date": {"type": "date"},"tags": {"type": "keyword"}}}
}

二、查询

Elasticsearch 支持多种查询类型,包括全文搜索查询、精确匹配查询、范围查询、布尔查询、聚合查询等;以下是使用 Elasticsearch 进行全文搜索查询、精确匹配查询、范围查询、布尔查询和聚合查询的示例:

1.全文搜索查询

GET /my_index/_search
{"query": {"match": {"description": "search term"}}
}

2.精确匹配查询

GET /my_index/_search
{"query": {"term": {"status": "active"}}
}

3.范围查询

GET /my_index/_search
{"query": {"range": {"price": {"gte": 10,"lte": 100}}}
}

4.布尔查询

GET /my_index/_search
{"query": {"bool": {"must": [{ "match": { "description": "search term" } },{ "term": { "status": "active" } }],"must_not": [{ "term": { "category": "books" } }],"should": [{ "term": { "brand": "Apple" } },{ "term": { "brand": "Samsung" } }]}}
}

5.聚合查询(统计总和、平均值、最大值和最小值...)


GET /index_topic/_search
{"query": {"bool": {"must": [{"term": {"Deleted":  0}},{"term": {"CountryId":  "CN"}}]}}, "size": 0,"aggs": {"total_count": {"sum": {"field": "TopicId"}},"max_topic_id": {"max": {"field": "TopicId"}},"min_topic_id": {"min": {"field": "TopicId"}}}
} 

6.通配符和正则表达式进行模糊匹配(会让性能下降,慎用,特别是左模糊开启的时候)

-- 右模糊匹配
GET /my_index/_search
{"query": {"wildcard": {"description": "elasticsearch*"}}
}-- 正则GET /my_index/_search
{"query": {"regexp": {"description": ".*elasticsearch.*"}}
}

7. 分页查询

{"query": {"match": {"description": "Elasticsearch tutorial"}},"from": 0,"size": 10
}

8. 条件删除数据

POST /index_topic/_delete_by_query
{"query": {"match": {"TopicId": "1739499560356679680"}}
}

三、设计索引时应该怎么考虑索引的分片和副本数、字段的类型和属性等因素

  1. 索引的分片和副本数:分片和副本数是 Elasticsearch 中非常重要的概念,它们可以影响索引的性能、可用性和容错能力。一般来说,分片数应该根据数据量和查询负载来确定,副本数应该根据可用性和容错能力来确定。如果数据量较大或查询负载较高,可以增加分片数来提高查询性能;如果需要提高可用性和容错能力,可以增加副本数来实现数据冗余和负载均衡。

  2. 字段的类型和属性:在定义索引中的字段时,需要考虑字段的类型和属性,以便更好地满足业务需求。例如,如果需要进行全文搜索,可以将文本类型字段设置为全文搜索类型,并指定相应的分析器;如果需要进行聚合查询,可以将数值类型字段设置为聚合类型,并指定相应的聚合方式。此外,还可以设置字段的索引选项、存储选项、忽略字段等属性,以便更好地控制字段的行为和性能。

  3. 索引的更新和删除策略:在设计索引时,需要考虑索引的更新和删除策略,以便更好地控制索引的性能和存储空间。例如,如果需要频繁更新或删除文档,可以将索引设置为支持快速更新和删除的类型,并使用合适的缓存策略来提高性能;如果需要保留历史数据或备份数据,可以将索引设置为支持冷热分离的类型,并使用合适的存储策略来降低存储成本。

  4. 索引的查询负载和性能需求:在设计索引时,需要考虑索引的查询负载和性能需求,以便更好地优化查询性能和响应时间。例如,如果查询负载较高或查询响应时间较长,可以使用缓存策略、查询优化器、索引分析器等技术来提高查询性能;如果需要支持实时查询或高并发查询,可以使用分布式查询、负载均衡、索引优化等技术来提高查询性能和可用性。

四、 ES 数据的冷热分离

设计 Elasticsearch 数据的冷热分离需要考虑以下几个方面:

  1. 数据的访问频率:将访问频率较高的数据放在热节点上,访问频率较低的数据放在冷节点上。

  2. 数据的存储周期:将存储周期较短的数据放在热节点上,存储周期较长的数据放在冷节点上。

  3. 数据的大小:将数据较小的放在热节点上,数据较大的放在冷节点上。

  4. 数据的重要性:将重要性较高的数据放在热节点上,重要性较低的数据放在冷节点上。

在实际应用中,可以通过以下几种方式来实现数据的冷热分离:

  1. 使用 Elasticsearch 的索引别名功能,将热数据和冷数据分别放在不同的索引中,并使用别名来统一访问。

  2. 使用 Elasticsearch 的节点标签功能,将热节点和冷节点分别打上不同的标签,并使用标签来控制数据的路由。

  3. 使用 Elasticsearch 的分片路由功能,将热数据和冷数据分别路由到不同的分片中,并使用分片路由来控制数据的访问。

  4. 使用 Elasticsearch 的索引生命周期管理功能,根据数据的存储周期来自动将数据从热节点转移到冷节点。

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

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

相关文章

转转交易猫自带客服多模板全开源完整定制版源码

商品发布&#xff1b; 请在后台商品添加成功后&#xff0c; 再点击该商品管理&#xff0c;可重新编辑当前商品的所有信息及配图以及支付等等相关信息 可点击分享或者跳转&#xff0c;将链接地址进行发布分享 请在手机端打开访问 访问商品主要模板文件路径目录 咸鱼&#…

请谈谈session、cookie、 localStorage和SessionStorage的区别和特点?

Session、Cookie、localStorage和SessionStorage都是用于在客户端和服务器之间存储数据的技术&#xff0c;但它们之间存在一些重要的区别和特点。 Session&#xff1a; 含义&#xff1a;在Web开发中&#xff0c;Session通常指的是服务器为每个用户维护的会话信息。当用户首次访…

系统架构13 - 软件工程(1)

软件工程 软件开发生命周期软件定义时期软件开发时期软件运行和维护文档 软件工程过程软件系统工具软件设计四个活动&#xff1a;能力成熟度模型CMMCMMCMMI两种表示方法 软件开发生命周期 软件定义时期 包括可行性研究和详细需求分析过程&#xff0c;任务是确定软件开发工程必…

【实操】基于 GitHub Pages + Hexo 搭建个人博客

《开发工具系列》 【实操】基于 GitHub Pages Hexo 搭建个人博客 一、引言二、接入 Node.js2.1 下载并安装 Node.js2.2 环境变量配置 三、接入 Git3.1 下载并安装 Git3.2 环境变量配置 四、接入 Hexo4.1 安装 Hexo4.2 建站4.3 本地启动服务器 五、接入 GitHub Pages5.1 初识 G…

Java--类继承

文章目录 主要内容一.学生类1.源代码代码如下&#xff08;示例&#xff09;: 2.结果 二.交通工具类1.源代码代码如下&#xff08;示例&#xff09;: 2.结果 三.圆类1.源代码代码如下&#xff08;示例&#xff09;: 2.结果 总结 主要内容 学生类交通工具类圆类 一.学生类 具有…

C 练习实例33 - 质数(素数)判断

题目&#xff1a;判断一个数字是否为质数。 程序分析&#xff1a;质数&#xff08;prime number&#xff09;又称素数&#xff0c;有无限个。一个大于1的自然数&#xff0c;除了1和它本身外&#xff0c;不能被其他自然数整除。 这题做过很多遍了&#xff0c;懂得都懂。 代码…

Raft算法详解(一):介绍

简单介绍 Raft是一种一致性算法&#xff0c;它包含了几个部分分别是领导者选举、日志复制、日志压缩和安全性。 角色 在Raft算法执行时存在着三种角色&#xff0c;分别是领导者&#xff08;Leader&#xff09;、追随者&#xff08;Follower&#xff09;以及竞选者&#xff0…

ChatGLM vs ChatGPT

所有的NLP大模型 都是transformer结构 1.Mask attention 的策略不同 2.训练任务目标不同 国内大模型nb公司&#xff1a;百度、清华智谱 一、主流大模型 粉色&#xff1a;Encoder-only。 绿色&#xff1a;Encoder-Decoder&#xff0c;尽头智谱ChatGLM。 蓝色&#xff1a;…

【MongoDB】下载安装、指令操作

目录 1.下载安装 2.指令 2.1.基础操作指令 2.2.增加 2.3.查询 2.4.修改 2.5.删除 前言&#xff1a; 关于MongoDB的核心概念请移步&#xff1a; 【文档数据库】ES和MongoDB的对比-CSDN博客 1.下载安装 本文以安装Windows版本的mongodb为例&#xff0c;Linux版本的其实…

三、arcgispro二次开发创建第一个工程

忙了几天&#xff0c;总算可以创建第一工程了。 步骤一&#xff1a; 步骤二&#xff1a; 工具介绍&#xff1a; 项目创建成功&#xff1a;项目目录在解决方案资源管理器中&#xff0c;整个工具都是动态可调整的&#xff0c;如下图&#xff1a; 想把窗口放哪里就把鼠标移到红…

Linux重定向:深入理解与实践

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;晴る—ヨルシカ 0:20━━━━━━️&#x1f49f;──────── 4:30 &#x1f504; ◀️ ⏸ ▶️ ☰ &…

DFA有穷自动机敏感词过滤算法

1.EndType package com.example.utils.wordfilter;/*** 结束类型定义*/ public enum EndType {/*** 有下一个,结束*/HAS_NEXT, IS_END } 2.WordType package com.example.utils.wordfilter;/*** 词汇类型*/ public enum WordType {/*** 黑名单/白名单*/BLACK, WHITE } 3.F…

RHEL - 更新升级软件或系统

《OpenShift / RHEL / DevSecOps 汇总目录》 文章目录 小版本软件更新yum update 和 yum upgrade 的区别升级软件和升级系统检查软件包是否可升级指定升级软件使用的发行版本方法1方法2方法3方法4 查看软件升级类型更新升级指定的 RHSA/RHBA/RHEA更新升级指定的 CVE更新升级指定…

L1-069 胎压监测(Java)

小轿车中有一个系统随时监测四个车轮的胎压&#xff0c;如果四轮胎压不是很平衡&#xff0c;则可能对行车造成严重的影响。 让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序&#xff0c;随时监测四轮的胎压&…

Java中的包、类、接口说明

写在开头 包、类、接口、方法、变量、参数、代码块,这些都是构成Java程序的核心部分,即便最简单的一段代码里都至少要包含里面的三四个内容,这两天花点时间梳理了一下,理解又深刻了几分。 Java中的包 Java 定义了一种名字空间,称之为包:package。一个类总是属于某个包…

Servlet系列:两种创建方式(xml,注解)

一、使用web.xml的方式配置&#xff08;Servlet2.5之前使用&#xff09; 在早期版本的Java EE中&#xff0c;可以使用XML配置文件来定义Servlet。在web.xml文件中&#xff0c;可以定义Servlet的名称、类名、初始化参数等。然后&#xff0c;在Java代码中实现Servlet接口&#x…

数据结构---数组

一、基本概念 1. 存放一组相同数据类型的集合 2.在内存中,分配连续的空间,数组创建时要指定大小 3. 定义 数据类型 [] 数组名 // 1.定义一个数组,里面的元素包含10, 20, 24, 17, 35, 58, 45, 74 int arr[] {10, 20, 24, 17, 35, 58, 45, 74}; 4. 获取数组的长度 int lengt…

wayland(xdg_wm_base) + egl + opengles 最简实例

文章目录 前言一、ubuntu 下相关环境准备1. 获取 xdg_wm_base 依赖的相关文件2. 查看 ubuntu 上安装的opengles 版本3. 查看 weston 所支持的 窗口shell 接口种类二、xdg_wm_base 介绍三、egl_wayland_demo1.egl_wayland_demo2_0.c2.egl_wayland_demo3_0.c3. xdg-shell-protoco…

Chatopera 云服务支持大语言模型对话(LLM),定制您的聊天机器人

2024 年&#xff0c;Chatopera 云服务继续不断完善&#xff0c;为开发者提供最好的定制聊天机器人的工具。在过去的一年&#xff0c;用户们反映最多的建议是 Chatopera 云服务内置大语言模型的对话&#xff0c;今天 Chatopera 云服务完成了产品升级&#xff0c;满足了这个诉求。…

HCIP-BGP选路实验

一.实验拓扑图 二.详细配置 R1 interface GigabitEthernet0/0/0 ip address 12.1.1.1 255.255.255.0interface LoopBack0 ip address 1.1.1.1 255.255.255.0interface LoopBack1 ip address 10.1.1.1 255.255.255.0bgp 1 router-id 1.1.1.1 peer 12.1.1.2 as-number 2ipv4-fa…