ElasticSearch 学习(一)

news/2024/11/29 9:35:19/

目录

  • 一、Elasticsearch 简介
  • 二、Elasticsearch 发展史
  • 三、Elasticsearch 功能
  • 四、Elasticsearch 特点
  • 五、Elasticsearch 应用场景


一、Elasticsearch 简介

Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合。

Elasticsearch 中没有一个单独的组件是全新的或者是革命性的。全文搜索很久之前就已经可以做到了, 就像很早之前出现的分析系统和分布式数据库。 革命性的成果在于将这些单独的,有用的组件融合到一个单一的、一致的、实时的应用中。对于初学者而言它的门槛相对较低, 而当你的技能提升或需求增加时,它也始终能满足你的需求。

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—​无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API

  • Lucene 是什么?
    • Lucene是非常优秀的成熟的 开源的 免费的纯 纯java 语言的全文索引检索工具包。
    • Lucene是一个高性能、可伸缩的信息搜索(IR)库。Information Retrieval(IR) library.它使你可以为你的应用程序添加索引和搜索能力。
    • Lucene的作者Doug Cutting是资深的全文索引/检索专家,最开始发布在他本人的主页上,2001年10月贡献给APACHE,成为APACHE基金的一个子项目。
    • Lucene是一个IR库而不是现成的产品,当然也不是Lucene的初识者常常认为的web爬行器。

二、Elasticsearch 发展史

重要版本发布及版本特性:

  • 0.4:2010年2月第一次发布

    • 2010年2月8日, Shay Banon 发表了一篇博客,说他基于Lucene开发(封装 ???)了一个分布式搜索引擎,实现了一些功能。。。
  • 0.7:2010年5月

    • 2010年5月14日发布,第一个可以查询到发版信息的版本,重要特性:
      • Zen Discovery 自动发现模块
      • Groovy Client支持
      • 简单的插件管理机制
      • 更好支持ICU分词器
      • 更多的管理API
  • 1.0:2014年2月

    • 2014年2月14日发布,重要特性:
      • Snapshot/Restore API 备份恢复API
      • 支持聚合分析Aggregations
      • CAT API 支持
      • 支持联盟查询
      • 断路器支持
      • Doc values 引入
  • 2.0:2015年10月

    • 2015年10月28日发布,重要特性:
      • 增加了 pipleline Aggregations
      • query/filter 查询合并,都合并到query中,根据不同的上下文执行不同的查询
      • 存储压缩可配置
      • Rivers 模块被移除
      • Multicast 组播发现被移除,成为一个插件,生产环境必须配置单播地址
  • 5.0:2016年10月

    • 2016年10月26日发布,重要特性:
      • Lucene 6.x 的支持,磁盘空间少一半;索引时间少一半;查询性能提升25%;支持IPV6。
      • Internal engine级别移除了用于避免同一文档并发更新的竞争锁,带来15%-20%的性能提升
      • Shrink API ,它可将分片数进行收缩成它的因数,如之前你是15个分片,你可以收缩成5个或者3个又或者1个,那么我们就可以想象成这样一种场景,在写入压力非常大的收集阶段,设置足够多的索引,充分利用shard的并行写能力,索引写完之后收缩成更少的shard,提高查询性能
      • 提供了第一个Java原生的REST客户端SDK
      • IngestNode,之前如果需要对数据进行加工,都是在索引之前进行处理,比如logstash可以对日志进行结构化和转换,现在直接在es就可以处理了
      • 提供了 Painless 脚本,代替Groovy脚本
  • 6.0:2017年8月

    • 2017年8月31日发布,重要特性:
      • 稀疏性 Doc Values 的支持
      • Index sorting,即索引阶段的排序。
      • 顺序号的支持,每个 es 的操作都有一个顺序编号(类似增量设计)
      • 无缝滚动升级
      • Removal of types,在 6.0 里面,开始不支持一个 index 里面存在多个 type
      • Index-template inheritance,索引版本的继承,目前索引模板是所有匹配的都会合并,这样会造成索引模板有一些冲突问题, 6.0 将会只匹配一个,索引创建时也会进行验证
      • Load aware shard routing, 基于负载的请求路由,目前的搜索请求是全节点轮询,那么性能最慢的节点往往会造成整体的延迟增加,新的实现方式将基于队列的耗费时间自动调节队列长度,负载高的节点的队列长度将减少,让其他节点分摊更多的压力,搜索和索引都将基于这种机制。
      • 已经关闭的索引将也支持 replica 的自动处理,确保数据可靠。
  • 7.0:2019年4月

    • 2019年4月10日发布,重要特性:
      • 引入了真正的内存断路器,它可以更精准地检测出无法处理的请求,并防止它们使单个节点不稳定
      • Zen2 是 Elasticsearch 的全新集群协调层,提高了可靠性、性能和用户体验,变得更快、更安全,并更易于使用
      • 查询优化
        • 更快的前 k 个查询
        • 间隔查询
        • Function score 2.0
  • 8.0:2022年2月

    • 2022年2月11日发布,重要特性:
      • REST API 兼容性
        • 8.0 为 Elasticsearch REST APIs 引入了一些重大的变化。Elasticsearch 已经在 REST API 中增加了对 7.x 兼容性 header 的支持。这些可选的 header 文件让你向 8.0 集群发出 7.x 兼容的请求,并收到 7.x 兼容的响应。
      • 安全功能在默认情况下被启用和配置,首次启动 Elasticsearch 时,会自动进行以下安全配置:
        • 为传输层和 HTTP 层生成 TLS 证书和密钥。
        • TLS 配置设置被写入elasticsearch.yml。
        • 为 elastic 用户生成密码。
        • 为 Kibana 生成一个注册令牌。
      • 系统索引得到更好保护
        • 在 Elasticsearch 8.0 中做了一些改变来保护系统索引不被直接访问。要访问系统索引的话,用户现在必须把 allow_restricted_indices 权限设置为 true。
        • superuser 角色也不再给予系统索引的写入权限。因此,内置的 elastic superuser 默认不能改变系统索引。
        • 此后,开发者应使用 Kibana 或相关的 Elasticsearch APIs 来管理某个功能的数据,而不是访问系统索引。如果你直接访问系统索引,Elasticsearch 将在 API 响应的 header 中和废弃日志中返回警告。
      • 新的 kNN 搜索(kNN搜索是通过相似度判断来根据查询向量查找K个邻近的向量),使用kNN的场景有:
        • 基于自然语言处理(NLP)算法的相关性排序。
        • 产品推荐和推荐引擎。
        • 图片或视频的相似搜索。
      • 更新了倒排索引的内部数据结构,节省了磁盘存储空间。
        • 这种变化将使 keyword 字段类型、 match_only_text 字段类型以及在较小程度上的 text字段类型受益。
        • 该更新使得转化为 message 字段索引大小(映射为match_only_text)减少了 14.4%,磁盘占用空间总体减少了 3.5%。
      • 加快geo_point,geo_shape和 range 字段索引速度
        • 新版本优化了多维点(multi-dimensional points)的索引速度,多维点是用于 geo_point、geo_shape 和range 字段的内部数据结构。Lucene 级别的基准测试显示,这些字段类型的索引速度提高了 10-15%。主要由这些字段组成的 Elasticsearch 索引和数据流可能会在索引速度方面有显著的改进。
      • PyTorch 模型支持自然语言处理 (NLP)
        • 可以上传在 Elasticsearch 之外训练的 PyTorch 模型,并在摄取时使用它们进行推理。
        • 第三方模型支持为 Elastic Stack 带来了现代自然语言处理 (NLP)和搜索用例,例如:
          • 填充蒙版 Fill-mask
          • 命名实体识别 Named entity recognition (NER)
          • 文本分类 Text classification
          • 文本嵌入 Text embedding
          • 零样本分类 Zero-shot classification
发布日期版本号时间间隔
2010-02-08V0.2
2010-05-14V0.795天
2014-02-14V1.01372 天
2015-10-28V2.0621 天
2016-10-26V5.0364 天
2017-11-14V6.0384 天
2019-04-10V7.0512 天
2022-02-11V8.01038 天

三、Elasticsearch 功能

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

  • 搜索就是类似于百度,查找各种网页
  • 数据分析就类似于博客统计累计访问量、电商平台的销量前十

 
全文检索、结构化检索、数据分析

  • 全文检索类似于sql中的模糊查询,全文进行搜索
  • 结构化搜索就类似于指定查询,查找到对应的一行

 
对海量数据进行近实时处理

  • 分布式:ES自定可以将海量数据分散到多台服务器上存储和检索
  • 海量数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理了
  • 近实时:检索个数据要花费1小时,(这时就不要近实时,做好进行离线批量处理),在秒级别对数据进行搜索和分析

四、Elasticsearch 特点

  • 可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司
  • Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;lucene(全文检索),商用的数据分析软件(也是有的),分布式数据库(mycat)
  • 对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂
  • 数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;Elasticsearch作为传统数据库的一个
  • 全文搜索:是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

五、Elasticsearch 应用场景

站点搜索、系统搜索、数据分析。。。

  • 维基百科,类似百度百科,牙膏,牙膏的维基百科,全文检索,高亮,搜索推荐
  • The Guardian(国外新闻网站),类似搜狐新闻,用户行为日志(点击,浏览,收藏,评论)+社交网络数据(对某某新闻的相关看法),数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)
  • Stack Overflow(国外的程序异常讨论论坛),IT问题,程序的报错,提交上去,有人会跟你讨论和回答,全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案
  • GitHub(开源代码管理),搜索上千亿行代码
  • 电商网站,检索商品
  • 日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana)
  • 商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅牙膏的监控,如果高露洁牙膏的家庭套装低于50块钱,就通知我,我就去买
  • BI系统,商业智能,Business Intelligence。比如说有个大型商场集团,BI,分析一下某某区域最近3年的用户消费金额的趋势以及用户群体的组成构成,产出相关的数张报表,**区,最近3年,每年消费金额呈现100%的增长,而且用户群体85%是高级白领,开一个新商场。ES执行数据分析和挖掘,Kibana进行数据可视化国内
  • 国内:站内搜索(电商,招聘,门户,等等),IT系统搜索(OA,CRM,ERP,等等),数据分析(ES热门的一个使用场景)

参考:
Elasticsearch 中文社区
Elasticsearch 中文文档
Elasticsearch: 权威指南
Elasticsearch-PHP
Elasticsearch 请求示例
Elasticsearch的术语原理概念及应用场景(一)
Elasticsearch基础1——搜索引擎发展史和工作流程、es/es-head/kibana的基础安装


http://www.ppmy.cn/news/24641.html

相关文章

JVM - 类加载,连接和初始化

目录 类加载和类加载器 概述 类加载要完成的功能 加载类的方式 类加载器 类加载器的关系 类加载器说明 双亲委派模型 工作过程如下: 双亲委派模型说明: 破坏双亲委派模型: 类连接和初始化 类连接主要验证的内容 类连接中的解析…

机械设备管理软件如何选择?机械设备管理软件哪家好?

随着信息化技术的进步与智能制造的发展趋势,很多机械设备制造企业也在一直探寻适合自己的数字化管理转型之路,而企业上ERP管理软件又是实现数字化管理的前提,机械设备管理软件对于企业来说就是关键一环。机械设备管理软件如何选择&#xff1f…

内存溢出、内存泄露的概述及常见情形

内存溢出(OutofMemoryError) 简述 java doc 中对 Out Of Memory Error 的解释是,没有空闲内存,并且垃圾收集器也无法提供更多内存。 JVM 提供的内存管理机制和自动垃圾回收极大的解放了用户对于内存的管理,由于 GC&…

Java面试题及答案整理汇总(2023最新版)

前言 面试前还是很有必要针对性的刷一些题,很多朋友的实战能力很强,但是理论比较薄弱,面试前不做准备是很吃亏的。这里整理了很多面试常考的一些面试题,希望能帮助到你面试前的复习并且找到一个好的工作,也节省你在网…

npm安装依赖报错 npm code ERESOLVEnpm ERESOLVE unable to resolve dependency tree

在安装npm i vue-router (路由)时出现了这个错误。 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: vue_test@0.1.0 npm ERR! Found: vue@2.6.14 npm ERR! node_modules/vue npm ERR! vue@"^2.6.…

TCP协议原理一

文章目录一、TCP协议二、TCP工作机制1.确认应答2.超时重传3.连接管理三次握手四次挥手一、TCP协议 我们的TCP协议相比于UDP协议复杂不少,今天我们就来一起学习一下TCP协议报文和原理 首先我们报头第一行里的端口号和UDP的端口号是一致的,都是用两个字节…

C++7:STL-模拟实现vector

目录 vector的成员变量 构造函数 reserve size() capacity() push_back 一些小BUG 赋值操作符重载 析构函数 【】操作符重载 resize pop_back Insert 迭代器失效 erase 二维数组问题 总结一下 vector,翻译软件会告诉你它的意思是向量,但其…

【GlobalMapper精品教程】045:空间操作(2)——相交(Intersect)

GlobalMapper提供的空间分析(操作)的方法有:交集、并集、单并集、差异、对称差集、相交、重叠、接触、包含、等于、内部、分离等,本文主要讲述相交工具的使用。 文章目录 一、实验数据二、符号化设置三、相交运算四、结果展示五、心灵感悟一、实验数据 加载配套实验数据(…