【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.mzph.cn/diannao/54291.shtml

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

相关文章

MySQL:事务的ACID特性隔离级别脏读、不可重复读、幻读、Next-Key锁——场景复现

目录 1、什么是事务 2、 事务的ACID特性 2.1 事务的隔离性 3、为什么要使用事务&#xff1f; 4、查看支持事务的存储引擎 5、使用事务 5.1 控制事务 5.1.1 开启事务 5.1.2 关闭事务 5.2 开始一个事务&#xff0c;执行修改后回滚 5.3 开始一个事务&#xff0c;执行修…

使用Addressables+SpriteAtlas打包产生冗余

1&#xff09;使用AddressablesSpriteAtlas打包产生冗余 2&#xff09;使用SBP打AssetBundle脚本引用丢失 3&#xff09;Unity构建后处理&#xff08;IPostprocessBuildWithReport等接口&#xff09;抛出异常后&#xff0c;构建不会停止 4&#xff09;Unity 2022.3.0版本使用Oc…

谷歌论文提前揭示o1模型原理:AI大模型竞争或转向硬件

Open AI最强模型o1的护城河已经没有了&#xff1f;仅在OpenAI发布最新推理模型o1几日之后&#xff0c;海外社交平台 Reddit 上有网友发帖称谷歌Deepmind在 8 月发表的一篇论文内容与o1模型原理几乎一致&#xff0c;OpenAI的护城河不复存在。 谷歌DeepMind团队于今年8月6日发布…

我的AI工具箱Tauri版-VideoClipMixingCut视频批量混剪

本教程基于自研的AI工具箱Tauri版进行VideoClipMixingCut视频批量混剪。 VideoClipMixingCut视频批量混剪 是自研AI工具箱Tauri版中的一款强大工具&#xff0c;专为自动化视频批量混剪设计。该模块通过将预设的解说文稿与视频素材进行自动拼接生成混剪视频&#xff0c;适合需要…

数据结构 ——— 算法的时间复杂度

目录 时间复杂度的概念 时间复杂度函数式 大O的渐进表示法的概念 大O的渐进表示法 时间复杂度的概念 在计算机科学中&#xff0c;算法的时间复杂度是一个函数&#xff08;数学上的函数式&#xff09;&#xff0c;它定量描述了该算法的运行时间&#xff0c;一个算法执行所耗…

java工具安装教程

提示:先安装软件打开后关闭&#xff0c;在执行魔法操作 解压后会多个文件夹&#xff0c;从文件夹打开 要魔法哪款软件就打开对应的魔法脚本 比如&#xff1a;idea就运行idea魔法 点击打开 显示下面弹窗则成功&#xff0c;点击确定即可 打开IDEA查看&#xff1a;

Arthas thread(查看当前JVM的线程堆栈信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.2 thread&#xff08;查看当前JVM的线程堆栈信息&#xff09;举例1&#xff1a;展示[数字]线程的运行堆栈&#xff0c;命令&#xff1a;thread 线程ID举例2&#xff1a;找出当前阻塞其他线程的线程 二、命令列表 2.1 jvm相关命令 2.…

面试题高频之token无感刷新(vue3+node.js)

无感刷新的基本原理 使用刷新令牌&#xff08;refresh token&#xff09;&#xff1a; ○ 应用程序在首次登录成功后会获得一个访问令牌&#xff08;access token&#xff09;和一个刷新令牌&#xff08;refresh token&#xff09;。 ○ 访问令牌通常有较短的有效期&#xff0…

人工智能 | 基于ChatGPT开发人工智能服务平台

简介 ChatGPT 在刚问世的时候&#xff0c;其产品形态就是一个问答机器人。而基于ChatGPT的能力还可以对其做一些二次开发和拓展。比如模拟面试功能、或者智能机器人功能。 模拟面试功能包括个性化问题生成、实时反馈、多轮面试模拟、面试报告。 智能机器人功能提供24/7客服支…

学习之使用IDEA集成GIT

一、环境准备 1.1 配置git忽略文件 git.ignore 文件模版内容如下: # Compiled class file *.Class#Log file *.log# BlueJ file *.ctxt# Mobile Tools for Java (J2Me) *.mtj.tmp/# Package File *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar.classpath .project .settings…

简单接口自动化框架实现(Python+requests+pytest)

1、接口自动化流程 1.需求分析2.挑选需要做自动化测试的功能3.设计测试用例4.搭建自动化测试环境[可选]5.设计自动化测试项目的架构[可选]6.编写代码7.执行测试用例8.生成测试报告并分析结果 2、框架结构 --api -->封装请求 --scripts -->编写测试脚本…

Python基础(六)——PyEcharts数据可视化初级版

案例 【前言&#xff1a;为了巩固之前的Python基础知识&#xff08;一&#xff09;到&#xff08;五&#xff09;&#xff0c;并为后续使用Python作为数据处理的好帮手&#xff0c;我们一起来看几个例子】 使用工具&#xff1a;Echarts Echarts 是一个由百度开源的数据可视化…

[2025]医院健康陪诊系统(源码+定制+服务)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【电路笔记】-运算放大器比较器

运算放大器比较器 文章目录 运算放大器比较器1、概述2、表示2.1 同相比较器2.2 反相比较器3、临界点转换4、施密特触发器4.1 同相触发器4.2 反相触发器4.3 应用5、总结1、概述 在前面的大多数运算放大器文章中,电路都有一个到反相输入的反馈环路。 这种设计是最常见的,因为它…

基于SpringBoot+Vue的企业会议室预定管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

Gin渲染

HTML渲染 【示例1】 首先定义一个存放模板文件的 templates文件夹&#xff0c;然后在其内部按照业务分别定义一个 posts 文件夹和一个 users 文件夹。 posts/index.tmpl {{define "posts/index.tmpl"}} <!DOCTYPE html> <html lang"en">&…

shell指令及笔试题

一&#xff1a;linux基本指令考察 创建文件&#xff0c;直接在本目录的上级目录下创建一个名为dir1的文件夹&#xff0c;并在dir1文件夹下创建一个名为file1的文件 答&#xff1a;本目录的上级目录下创建一个名为dir1的文件:mkdir ../dir1 在dir1文件夹下创建一个名为file1的…

【SQL】百题计划:SQL内置函数“LENGTH“的使用

【SQL】百题计划-20240912 方法一&#xff1a; Select tweet_id from Tweets where LENGTH(content) > 15;– 方法二&#xff1a; Select tweet_id from Tweets where CHAR_LENGTH(content)> 15;

初始c++:入门基础(完结)

打字不易&#xff0c;留个赞再走吧~~~ 目录 一函数重载二引用1 引⽤的概念和定义2引⽤的特性3引⽤的使⽤三inline四nullptr 一函数重载 C⽀持在同⼀作⽤域中出现同名函数&#xff0c;但是要求这些同名函数的形参不同&#xff0c;可以是参数个数不同或者 类型不同。这样C函数调⽤…

HTB-Blue(永恒之蓝漏洞复现)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解Blue靶机 渗透过程 信息搜集 服务器开放了smb服务&#xff0c;漏洞探测显示 具有ms17_010(永恒之蓝漏洞) 利用永恒之蓝 搜索永恒之蓝漏洞 use使用永恒之蓝漏洞 rhost //对方主机 lhost //回连主机 …