【Elasticsearch系列十四】Elasticsearch

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

      • 1.什么是 Elasticsearch
      • 2.Elasticsearch 的功能
      • 3.Elasticsearch 的使用场景
      • 4.Elasticsearch 的特点
      • 5.lucene 和 elasticsearch 的关系
      • 6.Elasticsearch 核心概念
      • 7.核心概念对比
      • 8.文档数据格式
      • 9.悲观锁乐观锁
      • 10.ES 并发控制
      • 11.配置文件详解

1.什么是 Elasticsearch

ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。
官网地址

2.Elasticsearch 的功能

  • 分布式的搜索引擎和数据分析引擎

    • 搜索:互联网搜索、电商网站站内搜索、OA 系统查询
    • 数据分析:电商网站查询近一周哪些品类的图书销售前十;新闻网站,最近 3 天阅读量最高的十个关键词,舆情分析。
  • 全文检索,结构化检索,数据分析

    • 全文检索:搜索商品名称包含 java 的图书 select *from books where book_name like"%java%".
    • 结构化检索:搜索商品分类为 spring 的图书都有哪些,selectfrom books
      where category_id=‘spring’
    • 数据分析:分析每一个分类下有多少种图书,select category_id,count(*)
      from books group by category_id
  • 海量数据进行近实时的处理

    • 分布式:ES 自动可以将海量数据分散到多台服务器上去存储和检索,经行并行查询,提高搜索效率。相对的,Lucene 是单机应用。
    • 近实时:数据库上亿条数据查询,搜索一次耗时几个小时,是批处理(batch-processing)。而 es 只需秒级即可查询海量数据,所以叫近实时。秒级。

3.Elasticsearch 的使用场景

  • 维基百科,类似百度百科,“网络七层协议”的维基百科,全文检索,高亮,搜索推荐
  • Stack Overflow(国外的程序讨论论坛),相当于程序员的贴吧。遇到 it 问题去上面发帖,热心网友下面回帖解答。
  • GitHub《开源代码管理),搜索上千亿行代码。
  • 电商网站,检索商品
  • 日志数据分析,logstash 采集日志,ES 进行复杂的数据分析(ELK 技术,elasticsearch+logstash+kibana )
  • 商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅《java 编程思想》的监控,如果价格低于 27 块钱,就通知我,我就去买。
  • BI 系统,商业智能(Business lntelligence)。大型连锁超市,分析全国网点传回的数据,分析各个商品在什么季节的销售量最好、利润最高。成本管理,店面租金、员工工资、负债等信息进行分析。从而部署下一个阶段的战略目标。
  • 百度搜索,第一次查询,使用 es。OA、ERP 系统站内搜索。

4.Elasticsearch 的特点

  • 可拓展性:大型分布式集群(数百台服务器)技术,处理 PB 级数据,大公司可以使用。小公司数据量小,也可以部署在单机。大数据领域使用广泛。
  • 技术整合:将全文检索、数据分析、分布式相关披术整合在一起:lucene(全文检索),商用的数据分析软件(BI 软件),分布式数据库(mycat)
  • 部署简单:开箱即用,很多默认配置不需关心,解压完成直接运行即可。拓展时,只需多部署几个实例即可,负载均衡、分片迁移集群内部自己实施。
  • 接口简单:使用 restful api 经行交互,跨语言。
  • 功能强大:Elasticsearch 作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能,如全文检索,同义词处理,相关度排名。

5.lucene 和 elasticsearch 的关系

Lucene:最先进功能最强大的搜索库,直接基于 lucene 开发,非常复杂,api 复杂.

Elasticsearch:基于 lucene,封装了许多 lucene 底层功能,提供简单易用的 restful api 接口和许多语言的客户端,如 java 的高级客户端(Java Hijgh Level REST Client)和底层客户端(Java Low Level REST Client)

6.Elasticsearch 核心概念

NRT(Near Realtime):近实时

  • 写入数据时,过 1 秒才会被搜索到,因为内部在分词、录入索引。
  • es 搜索时:搜索和分析数据需要秒级出结果。

Cluster:集群
包含一个或多个启动着 es 实例的机器群。通常一台机器起一个 es 实例。同一网络下,集名一样的多个 es 实例自动组成集群,自动均衡分片等行为。默认集群名为"elasticsearch"。
Node:节点
每个 es 实例称为一个节点。节点名自动分配,也可以手动配置。
Document:文档
es 中的最小数据单元。一个 document 就像数据库中的一条记录。通常以 json 格式显示。多个 document 存储于一个索引(Index)中。

Index:索引
包含一堆有相似结构的文档数据。
索引创建规则:

  • 仅限小写字母
  • 不能包含\、/、*、?、”、<、>、|、#以及空格符等特殊符号
  • 从 7.0 版本开始不再包含冒号
  • 不能以、或+开头或者_下划线开头
  • 不能超过 255 个字节

Field:字段
就像数据库中的列(Columns),定义每个 document 应该有的字段。
Type:类型
每个索引里都可以有一个或多个 type,type 是 index 中的一个逻辑数据分类,type 下的 document.都有相同的 field.

注意:6.0 之前的版本有 type(类型)概念,type 相当于关系数据库的表,ES 官方将在 ES9.0 版本中彻底删除 type。
shard:分片
index 数据过大时,将 index 里面的数据,分为多个 shard,分布式的存储在各个服务器上面。可以支持海量数据和高并发,提升性能和吞吐量,充分利用多台机器的 cpu。
replica:副本
在分布式环境下,任何一台机器都会随时宕机,如果宕机,index 的一个分片没有,导致此 index 不能搜索。所以,为了保证数据的安全,我们会将每个 index 的分片经行备份,存储在另外的机器上。保证少数机器宕机 es 集群仍可以搜索。

能正常提供查询和插入的分片我们叫做主分片(primary shard),其余的我们就管他们叫做备份的分片(replica shard)。
es6 默认新建索引时,5 分片,1 副本,也就是一主一备,共 10 个分片。所以,es 集群最小规模为两台。es7 1 分片,1 副本,一共 2 分片。

7.核心概念对比

关系型数据库 mysql非关系型数据库 Elasticsearch
数据库 Database索引 Index
表 Table索引 Index(原为 Type)
数据行 Row文档 Document
数据列 Column字段 Field
约束 Schema映射 Mapping

8.文档数据格式

  1. 应用系统的数据结构都是面向对象的,具有复杂的数据结构。
  2. 对象存储到数据库,需要将关联的复杂对象属性插到另一张表,查询时再拼接起来。
  3. es 面向文档,文档中存储的数据结构,与对象一致。所以一个对象可以直接存成一个文档。
  4. es 的 documentjson 数据格式来表达。

而在 es 中,一个学生存成文档如下:

{"id": "1","name": "张三","last_name": "zhang","classInfo": {"id": "1","className": "三年二班"}
}

9.悲观锁乐观锁

为控制并发问题,我们通常采用锁机制。分为悲观锁和乐观锁两种机制。

  • 悲观锁:很悲观,所有情况都上锁。此时只有一个线程可以操作数据。具体例子为数据库中的行级锁、表级锁、读锁、写锁等。
  • 悲观锁特点:优点是方便,直接加锁,对程序透明。缺点是效率低。
  • 乐观锁:很乐观,对数据本身不加锁。提交数据时,通过一种机制验证是否存在冲突,如 es 中通过版本号验证。
  • 乐观锁特点:优点是并发能力高。缺点是操作繁琐,在提交数据时,可能反复重试多次。

10.ES 并发控制

基于_version 的版本控制,es 对于文档的增删改都是基于版本号

PUT /book/_doc/2
{"id":1,"title":"这是一11文章","content":"xxxxx","comment":"备注信息","mobile":"13344556677"
}
{"_index": "book","_type": "_doc","_id": "2","_version": 20,"result": "updated","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 26,"_primary_term": 1
}

多次执行返回的_version 是递增的

11.配置文件详解

配置文件的地址,可以参考部署 elasticsearch 的基础文档里面有说明.

#配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name: elasticsearch#节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。
node.name: "Franz Kafka"#指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
node.master: true#指定该节点是否存储索引数据,默认为true。
node.data: true#设置默认索引分片个数,默认为5片。
index.number_of_shards: 5#设置默认索引副本个数,默认为1个副本。
index.number_of_replicas: 1#设置配置文件的存储路径,默认是es根目录下的config文件夹。
path.conf: /path/to/conf#设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:
path.data: /path/to/data
path.data: /path/to/data1,/path/to/data2#设置临时文件的存储路径,默认是es根目录下的work文件夹。
path.work: /path/to/work#设置日志文件的存储路径,默认是es根目录下的logs文件夹
path.logs: /path/to/logs#设置插件的存放路径,默认是es根目录下的plugins文件夹
path.plugins: /path/to/plugins#设置为true来锁住内存。因为当jvm开始swapping时es的效率 会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。 同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。
bootstrap.mlockall: true#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。
network.bind_host: 192.168.0.1#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
network.publish_host: 192.168.0.1#这个参数是用来同时设置bind_host和publish_host上面两个参数。
network.host: 192.168.0.1#设置节点间交互的tcp端口,默认是9300。
transport.tcp.port: 9300#设置是否压缩tcp传输时的数据,默认为false,不压缩。
transport.tcp.compress: true#设置对外服务的http端口,默认为9200。
http.port: 9200#设置内容的最大容量,默认100mb
http.max_content_length: 100mb#是否使用http协议对外提供服务,默认为true,开启。
http.enabled: false#gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说。
gateway.type: local#设置集群中N个节点启动时进行数据恢复,默认为1。
gateway.recover_after_nodes: 1#设置初始化数据恢复进程的超时时间,默认是5分钟。
gateway.recover_after_time: 5m#设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。
gateway.expected_nodes: 2#初始化数据恢复时,并发恢复线程的个数,默认为4。
cluster.routing.allocation.node_initial_primaries_recoveries: 4#添加删除节点或负载均衡时并发恢复线程的个数,默认为4。
cluster.routing.allocation.node_concurrent_recoveries: 2#设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。
indices.recovery.max_size_per_sec: 0#设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。
indices.recovery.concurrent_streams: 5#设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1#设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。
discovery.zen.ping.timeout: 3s#设置是否打开多播发现节点,默认是true。
discovery.zen.ping.multicast.enabled: false#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]#下面是一些查询时的慢日志参数设置
index.search.slowlog.level: TRACE
index.search.slowlog.threshold.query.warn: 10s
index.search.slowlog.threshold.query.info: 5s
index.search.slowlog.threshold.query.debug: 2s
index.search.slowlog.threshold.query.trace: 500msindex.search.slowlog.threshold.fetch.warn: 1s
index.search.slowlog.threshold.fetch.info: 800ms
index.search.slowlog.threshold.fetch.debug:500ms
index.search.slowlog.threshold.fetch.trace: 200ms

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

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

相关文章

Linux 中的 Screen 命令详解

目录 前言1. 什么是 Screen 命令2. Screen 命令的主要功能3. Screen 命令的安装4. Screen 的基础使用4.1 启动一个新的 Screen 会话4.2 恢复一个断开的 Screen 会话4.3 退出一个 Screen 会话 5. Screen 命令的常用参数5.1 -S&#xff1a;指定会话名称5.2 -r&#xff1a;恢复会话…

同一个单元格内包含标签和文本框

<!DOCTYPE html> <html> <head> <title>单元格内包含标签和文本框</title> <style> /* 可选的CSS样式&#xff0c;用于美化表格 */ table { width: 50%; /* 设置表格宽度为页面宽度的50% */ border-collapse: collapse; /* 合并…

LabVIEW软件维护的内容是什么呢?

LabVIEW软件维护涉及多个方面&#xff0c;确保程序的正常运行和长期稳定性。维护内容包括以下几个方面&#xff1a; 1. Bug修复 在开发和运行过程中&#xff0c;可能会出现各种软件问题或缺陷&#xff08;bugs&#xff09;。维护工作之一就是识别这些问题并通过修复程序中的代…

网络高级day01(Modbus 通信协议)

目录 1》modbus分类 1> Modbus RTU 2> Modbus ASCLL 3> Modbus TCP 2》Modbus TCP的特点 3》Modbus TCP协议 1> 报文头&#xff08;一共7个字节&#xff09; 2> 寄存器 3> 功能码 4> 数据 01H 功能码分析 05H 功能码分析 0FH 功能码分析 1》modbus…

【5】AT32F437 OpenHarmony轻量系统移植教程(2)

开源地址&#xff1a;https://gitee.com/AT32437_OpenHarmony 学习本文档的意义 1.学习移植OpenHarmony轻量系统到AT32全系列mcu上&#xff0c;本文档移植的具体型号为AT32F437ZMT7 2.学习OpenHarmony轻量系统开发 3.适配vprintf, vfprintf, printf, snprintf 和sprintf 1…

【新手上路】衡石分析平台系统管理手册-安全管理

安全策略​ 安全策略是针对系统中所有用户进行的安全控制&#xff0c;只有系统管理员可以设置。 打开设置->安全策略页面。 登录安全策略​ 启用复杂密码​ 启用之后&#xff0c;用户修改密码时&#xff0c;必须输入符合要求的复杂密码。 密码90天失效​ 密码的有效期…

UnLua扩展C++函数和蓝图自定义事件

一、通过BlueprintImplementableEvent标记扩展C函数 1、 这个标记表示C不需要实现&#xff0c;让蓝图/Lua重写。 2、首先在C中将LuaImp函数标记为BlueprintImplementableEvent&#xff0c;不需要实现&#xff0c;然后再GetIndex中调用该函数。 MyBaseActor.h UFUNCTION(Bluepr…

任务书与开题报告的区别与联系:如何让二者相辅相成

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 大家好&#xff01;今天咱们聊聊论文写作过程中两个让人又爱又恨的关键步骤&#xff1a;任务书和开题报告。 这两兄弟可是你毕业路上的第一关卡&#xff0c;搞不定它们&#xff0c;你后面别说论文了&#…

Kafka集群扩容(新增一台kafka节点)

kafka集群扩容、kafka topic迁移 现有环境 IP组件角色192.168.17.51kafka01broker1192.168.17.52kafka02broker2192.168.17.53kafka03broker3 扩容之后环境 IP组件角色192.168.17.51kafka01broker1192.168.17.52kafka02broker2192.168.17.53kafka03broker3192.168.17.54ka…

letterSpacing导致TextView文本被截断

一.背景介绍 &#xff08;Android10 11目前有这个问题 Android15似乎有新的属性 但是没有可用的环境 没有验证&#xff09; 简介 android:maxLines"1" android:textAlignment"viewStart" android:letterSpacing"0.04" 多个属性同时作用情况下 …

基于C语言+SQL Server2008实现(控制台)图书管理系统

第1章 概述 1.1项目背景 随着科技的发展&#xff0c;尤其是计算机技术的迅猛发展&#xff0c;图书馆管理的问题从以往的人工管理&#xff0c;到现在的电脑化&#xff0c;系统化&#xff0c;是对图书馆管理方法的质的飞跃&#xff0c;这些技术不仅让图书馆管理变得更加方便、快…

用代码生成代码之Roslyn-C#代码分析和生成工具

Roslyn 是什么&#xff1f; Roslyn是微软公司开源的.NET编译器&#xff0c;它提供了丰富的代码分析API&#xff0c;并支持C#和Visual Basic代码的编译。 Roslyn 的主要功能 编译器扩展&#xff1a; 使用Roslyn可以创建自定义的编译器扩展&#xff0c;如语法分析器、重构器、…

Redis主从架构原理

我们使用redis的时候为了预防单点故障&#xff0c;通常要做高可用设计&#xff0c;redis主从架构就是一种防止redis主节点宕机启用从节点的高可用设计方案。下面我们看一下redis主从架构的设计原理。 Redis 主从架构 单机的 Redis&#xff0c;能够承载的 QPS 大概就在上万到几…

力扣 16.最接近的三数之和

文章目录 题目介绍解法 题目介绍 解法 设 snums[i]nums[j]nums[k]&#xff0c;为了判断 s 是不是与 target 最近的数&#xff0c;我们还需要用一个变量 minDiff 维护 ∣s−target∣ 的最小值。分类讨论&#xff1a; 如果 starget&#xff0c;那么答案就是 s&#xff0c;直接返…

网络-内核是如何与用户进程交互

1、socket的直接创建 net/socket.cSYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) {...retval sock_create(family, type, protocol, &sock);... }int sock_create(int family, int type, int protocol, struct socket **res) {return __sock_create(cu…

英飞凌PSoC4000T的GPIO中断示例工程

关于PSoC4000T的初步介绍见:英飞凌MCU第五代高性能CAPSENSE技术PSoC4000T_psoc 4000t-CSDN博客 下面这个工程,在modustoolbox中可编译、下载到开发板、debug调试。 编译时会用到mtb_shared这个库: 已经pdl这个periperal driver library库:

imo云办公室 Imo_DownLoadUI.php 任意文件下载漏洞复现

0x01 漏洞描述&#xff1a; imo云办公室由上海易睦网络科技有限公司于2007年创立&#xff0c;总部位于上海&#xff0c;imo云办公室管理运营企业即时通讯平台imo&#xff0c;包括对imo的在线支持&#xff0c;故障处理&#xff0c;客户服务等&#xff0c;对imo进行持续研发&…

利用echarts 显示图片信息

当前有个需求,需要对其进行相关统计,这里我们采用jquery3.6 与echarts.js 做相关图表,不解释,直接上代码吧 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

IM项目-----文件管理子服务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、搭建思想二、服务器搭建1.继承fileService类&#xff0c;重写业务方法服务器类设计建造者类 前言 文件管理子服务&#xff0c;主要用于管理用户的头像&…

两台虚拟机之分布式部署

Apache2 和 PHP 安装 在虚拟机1上执行以下步骤: 更新系统包列表: sudo apt update安装 Apache2: sudo apt install apache2 -y安装 PHP 及其扩展: sudo apt install php libapache2-mod-php php-mysql配置Apache和PHP sudo nano /etc/apache2/mods-enabled/dir.conf#…