Elasticsearch入门学习

Elasticsearch是什么

Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展的数据存储和矢量数据库。 它针对生产规模工作负载的速度和相关性进行了优化。 使用 Elasticsearch 近乎实时地搜索、索引、存储和分析各种形状和大小的数据。

特点

  1. 分布式:Elasticsearch 设计为在多台服务器上运行,可以处理大量数据和高并发请求。

  2. 高可扩展性:可以轻松地通过增加更多的节点来扩展集群,以提高搜索和索引的性能。

  3. 实时搜索:Elasticsearch 能够提供接近实时的搜索体验,这意味着在索引数据后,可以立即搜索到这些数据。

  4. 多租户:支持多租户架构,允许多个用户或应用程序共享同一个 Elasticsearch 集群。

  5. RESTful API:Elasticsearch 提供了一个基于 REST 的 API,使得与搜索引擎的交互变得简单,可以通过 HTTP 请求来索引、搜索、更新和删除数据。

  6. JSON 文档:Elasticsearch 使用 JSON 格式来存储和索引数据,这使得它易于与其他使用 JSON 的应用程序集成。

  7. 分析和聚合:Elasticsearch 提供了强大的分析和聚合功能,可以对数据进行复杂的分析,如计算平均值、总和、计数等。

  8. 索引和搜索功能:Elasticsearch 提供了丰富的索引和搜索功能,包括全文搜索、精确匹配、范围查询、模糊搜索等。

  9. 监控和日志:Elasticsearch 通常与其他 Elastic Stack 产品(如 Logstash 和 Kibana)一起使用,用于监控、日志记录和可视化数据。

  10. 安全性:Elasticsearch 提供了安全特性,如用户认证、授权和加密,以保护数据和集群的安全。

Elasticsearch 广泛应用于日志分析、全文搜索、安全情报、业务分析等领域。它的灵活性和可扩展性使其成为处理大规模搜索和分析任务的理想选择。

Elasticsearch核心概念

1、Cluster:集群

Elasticsearch可以作为一个独立的单个搜索服务器,不过,为了处理大型数据集,实现容错和高可用性,Elasticsearch可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

2、Node:节点

形成集群的每个服务器称为节点。

3、Shard:分片

当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。 当你查询的索引分布在多个分片上时,Elasticsearch会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

4、Replia:副本

为提高查询吞吐量或实现高可用性,可以使用分片副本。 副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。 当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

索引结构

下图是索引结构,下边黑色部分是物理结构,上边蓝色部分是逻辑结构,逻辑结构也是为了更好的去描述工作原理及去使用物理结构中的索引文件。

Elasticsearch工作原理

当Elasticsearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节点,并与之建立连接。

Elasticsearch数据架构的主要概念(与关系数据库Mysql对比)

安装

  1. 前提条件:需要jdk,超详细JDK下载与安装步骤(保姆级,含安装包)
  2. 要想安装 Elasticsearch,先下载并解压适合你操作系统的 Elasticsearch 版本: Elasticsearch官网

例如:windows下载

        3. 解压之后进入bin目录下,双击执行elasticsearch.bat

        4.看到started说明启动成功,打开浏览器访问:http://localhost:9200/

页面化工具Kibana安装

Kibana官网:Kibana 的版本需要和 Elasticsearch 的版本一致

安装前提

ElasticSearch安装

Node.js安装:Windows下安装及配置Node.js

下载安装

在 Windows 中安装 Kibana 使用 .zip 包

配置

在编辑器中打开config / kibana.yml

设置elasticsearch.url为指向您的Elasticsearch实例

默认值: "http://localhost:9200" 用来处理所有查询的 Elasticsearch 实例的 URL

运行

双击 bin\kibana.bat,浏览器访问:http://localhost:5601/

使用示例

连接

import ("es_study/global""fmt""github.com/olivere/elastic/v7"
)func EsConnect() {client, err := elastic.NewClient(elastic.SetURL("http://127.0.0.1:9200"),elastic.SetSniff(false),elastic.SetBasicAuth("", ""),)if err != nil {fmt.Println(err)return}global.ESClient = client
}

mapping映射

{"mappings": {"properties": {"title": { "type": "text" // 查询的时候是分词匹配},"key": { "type": "keyword" // 完整匹配},"user_id": {"type": "integer"},"created_at":{"type": "date","null_value": "null","format": "[yyyy-MM-dd HH:mm:ss]"}}}
}

创建索引

1. 判断索引是否存在,如果存在,删除索引

2. 创建索引

func CreateIndex() {index := "user_index"if ExistsIndex(index) {// 索引存在,先删除,在创建DeleteIndex(index)}createIndex, err := global.ESClient.CreateIndex(index).BodyString(models.UserModel{}.Mapping()).Do(context.Background())if err != nil {fmt.Println(err)return}fmt.Println(createIndex.Index, "索引创建成功")
}// ExistsIndex 判断索引是否存在
func ExistsIndex(index string) bool {exists, _ := global.ESClient.IndexExists(index).Do(context.Background())return exists
}func DeleteIndex(index string) {_, err := global.ESClient.DeleteIndex(index).Do(context.Background())if err != nil {fmt.Println(err)return}fmt.Println(index, "索引删除成功")
}

批量添加/删除

//批量添加
func DocCreateBatch() {list := []models.UserModel{{ID:        12,UserName:  "zs",NickName:  "张三",CreatedAt: time.Now().Format("2006-01-02 15:04:05"),},{ID:        13,UserName:  "ls",NickName:  "李四",CreatedAt: time.Now().Format("2006-01-02 15:04:05"),},}bulk := global.ESClient.Bulk().Index(models.UserModel{}.Index()).Refresh("true")for _, model := range list {req := elastic.NewBulkCreateRequest().Doc(model)bulk.Add(req)}res, err := bulk.Do(context.Background())if err != nil {fmt.Println(err)return}fmt.Println(res.Succeeded())
}//批量删除
func DocDeleteBatch() {idList := []string{"tGcofYkBWS69Op6QHJ2g","tWcpfYkBWS69Op6Q050w",}bulk := global.ESClient.Bulk().Index(models.UserModel{}.Index()).Refresh("true")for _, s := range idList {req := elastic.NewBulkDeleteRequest().Id(s)bulk.Add(req)}res, err := bulk.Do(context.Background())if err != nil {fmt.Println(err)return}fmt.Println(res.Succeeded())  // 实际删除的文档切片
}

文档查询

// 1、列表查询
func DocFind() {limit := 2page := 4from := (page - 1) * limitquery := elastic.NewBoolQuery()res, err := global.ESClient.Search(models.UserModel{}.Index()).Query(query).From(from).Size(limit).Do(context.Background())if err != nil {fmt.Println(err)return}count := res.Hits.TotalHits.Value  // 总数fmt.Println(count)for _, hit := range res.Hits.Hits {fmt.Println(string(hit.Source))}
}// 2、精准查询
query := elastic.NewTermQuery("user_name", "zs")// 3、模糊查询
query := elastic.NewMatchQuery("nick_name", "张三")// 4、嵌套字段查询
"title": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}
},
//因为title是text类型,只能模糊匹配,但是需要精确匹配的时候,也能通过title.keyword的形式进行精确匹配query := elastic.NewTermQuery("title.keyword", "王五") // 精确匹配
query := elastic.NewMatchQuery("title", "王五")  // 模糊匹配

文档更新

func DocUpdate() {res, err := global.ESClient.Update().Index(models.UserModel{}.Index()).Id("vmdnfYkBWS69Op6QEp2Y").Doc(map[string]any{"user_name": "你好呀",}).Do(context.Background())if err != nil {fmt.Println(err)return}fmt.Printf("%#v\n", res)
}

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

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

相关文章

重邮+数字信号处理实验六:用 MATLAB 设计 IIR 数字滤波器

一、实验目的 1、加深对 IIR 数字滤波器设计方法和设计步骤的理解; 2、掌握用模拟滤波器原型设计 IIR 数字滤波器的方法; 3、能编写 MATLAB 函数,掌握设计 IIR 数字滤波器的函数调用方法; 4、根据不同的应用场景&#xff0…

mac intel芯片下载安卓模拟器

一、调研 目前主流两个模拟器: 雷神模拟器 不支持macosmumu模拟器pro版 不支持macos intel芯片 搜索到mumu的Q&A中有 “Intel芯片Mac如何安装MuMu?” q&a🔗:https://mumu.163.com/mac/faq/install-on-intel-mac.html 提…

fast-crud select下拉框 实现多选功能及下拉框数据动态获取(通过接口获取)

教程 fast-crud select示例配置需求:需求比较复杂 1. 下拉框选项需要通过后端接口获取 2. 实现多选功能 由于这个前端框架使用逻辑比较复杂我也是第一次使用,所以只记录核心问题 环境:vue3,typescript,fast-crud ,elementPlus 效果 代码 // crud.tsx文件(/.ts也行 js应…

【伪随机数】关于排序算法自测如何生成随机数而引发的……

以 Random 开始 可能一开始&#xff0c;你只是写到了排序算法如何生成随机数 public static void main(String[] args) {Random random new Random();int[] nums new int[10];for (int i 0; i < nums.length; i) {nums[i] random.nextInt(100);}System.out.println(&q…

项目概述、开发环境搭建(day01)

软件开发整体介绍 软件开发流程 第1阶段: 需求分析 需求规格说明书&#xff0c; 一般来说就是使用 Word 文档来描述当前项目的各个组成部分&#xff0c;如&#xff1a;系统定义、应用环境、功能规格、性能需求等&#xff0c;都会在文档中描述。产品原型&#xff0c;一般是通过…

1Hive概览

1Hive概览 1hive简介2hive架构3hive与Hadoop的关系4hive与传统数据库对比5hive的数据存储 1hive简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进…

Hive迁移,小表(10G以下的),分区快速修复批量脚本

hive迁移要迁移元数据&#xff08;mysql&#xff09;&#xff0c;要迁移实际数据hdfs&#xff0c;迁移完后如果有分区&#xff0c;通常是不能访问的。 这里就要修复分区了&#xff0c;如果是大表&#xff0c;几十T这种&#xff0c;迁移可能花了24小时&#xff0c;那么你修复分…

Vulnhub DC-9靶机实战

前言 这里说一下这个靶机的难点 1.这次sql注入是两个库的&#xff0c;在不使用sqlmap的情况下很多人直接database()看数据库&#xff0c;另一个库反倒没关注 2.nmap的扫描方式如果用-sT的tcp连接扫端口的话是扫不到那些被防火墙过滤的端口的&#xff0c;直接nmap ip就可以 3…

快速、可靠且高性价比的定制IP模式提升芯片设计公司竞争力

作者&#xff1a;Karthik Gopal&#xff0c;SmartDV Technologies亚洲区总经理 智权半导体科技&#xff08;厦门&#xff09;有限公司总经理 无论是在出货量巨大的消费电子市场&#xff0c;还是针对特定应用的细分芯片市场&#xff0c;差异化芯片设计带来的定制化需求也在芯片…

【Git版本控制器--1】Git的基本操作--本地仓库

目录 初识git 本地仓库 认识工作区、暂存区、版本库 add操作与commit操作 master文件与commit id 修改文件 版本回退 撤销修改 删除文件 初识git Git 是一个分布式版本控制系统&#xff0c;主要用于跟踪文件的更改&#xff0c;特别是在软件开发中。 为什么要版本…

2025宝塔API一键建站系统PHP源码

源码介绍 2025宝塔API一键建站系统PHP源码&#xff0c;对接自己的支付&#xff0c;虚拟主机也能搭建&#xff0c;小白式建站系统&#xff0c;基于宝塔面板搭建的建站系统&#xff0c;功能丰富&#xff0c;多款模板&#xff0c;每日更新 上传源码到服务器&#xff0c;浏览器访问…

在IDEA上运行Java项目

新建一个项目&#xff0c;下面创建模块&#xff0c;然后在src下新建包名&#xff0c;最后见类&#xff08;class&#xff09; 设置主题 settings>apparence 设置字体 Editor> Font 设置注释 Editor>Color Scheme>Language Defaults>Comments 设置自动导包 …

2025年01月13日Github流行趋势

1. 项目名称&#xff1a;Jobs_Applier_AI_Agent 项目地址url&#xff1a;https://github.com/feder-cr/Jobs_Applier_AI_Agent项目语言&#xff1a;Python历史star数&#xff1a;25929今日star数&#xff1a;401项目维护者&#xff1a;surapuramakhil, feder-cr, cjbbb, sarob…

DHCP、MSTP+VRRP总结实验

R1即使服务器&#xff08;给予dhcp的地址的&#xff09; [LSW1]int Eth-Trunk 12 [LSW1-Eth-Trunk12]mode manual load-balance //配置链路聚合模式为手工负载分担模式 [LSW1-Eth-Trunk12]load-balance src-dst-mac //配置基于源目IP的负载分担模式[LSW1-Eth-Trunk12]trunk p…

【ArcGIS初学】产生随机点计算混淆矩阵

混淆矩阵&#xff1a;用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) &#xff1a;某类中正确分类的像元数除以参考数据中该类的像元数(列方向)&#xff0c;又称…

有一台服务器可以做哪些很酷的事情

有一台服务器可以做哪些很酷的事情 今天我也来简单分享一下&#xff0c;这几年来&#xff0c;我用云服务器做了哪些有趣的事情。 服务器推荐 1. 个人博客 拥有个人服务器&#xff0c;你可以完全掌控自己的网站或博客。 与使用第三方托管平台相比&#xff0c;你能自由选择网站…

科研绘图系列:R语言绘制Y轴截断分组柱状图(y-axis break bar plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍特点意义加载R包数据下载导入数据数据预处理画图输出总结系统信息介绍 Y轴截断分组柱状图是一种特殊的柱状图,其特点是Y轴的刻度被截断,即在某个范围内省略了部分刻度。这种图表…

pytest+request+yaml+allure搭建低编码调试门槛的接口自动化框架

接口自动化非常简单&#xff0c;大致分为以下几步&#xff1a; 准备入参调用接口拿到2中response&#xff0c;继续组装入参&#xff0c;调用下一个接口重复步骤3校验结果是否符合预期 一个优秀接口自动化框架的特点&#xff1a; 【编码门槛低】&#xff0c;又【能让新手学到…

三轴云台之RTSP流分辨率

三轴云台是一种能够在三个轴向上&#xff08;通常是俯仰、偏航和滚动轴&#xff09;准确、稳定地控制其负载&#xff08;如相机、传感器等&#xff09;位置和姿态的设备。而RTSP&#xff08;Real Time Streaming Protocol&#xff09;是一种网络控制协议&#xff0c;用于控制媒…

Facebook 隐私变革之路:回顾与展望

在数字时代&#xff0c;个人隐私的保护一直是社交平台面临的重大挑战之一。作为全球最大的社交网络平台&#xff0c;Facebook&#xff08;现为Meta&#xff09;在处理用户隐私方面的变革&#xff0c;历经了多次调整与完善。本文将回顾Facebook在隐私保护方面的历程&#xff0c;…