Elasticsearch 笔记

2023-11-15

Elasticsearch 基础

Lucene 简介

百度百科:Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库

官网参考地址:https://lucene.apache.org/

基于Lucene的搜索引擎有:Apache Solr 、Elasticsearch、 Index Tank 、Katta 、Bobo Search 、Compass 、Summa 、Constellio

Lucene最初是由Doug Cutting完成的:

Doug Cutting是Lucene、Nutch 、Hadoop等项目的发起人,大佬就是不一样

img

Elasticsearch 是什么

官方参考网址:https://www.elastic.co/cn/what-is/elasticsearch

ELK官方网址:https://www.elastic.co/cn/

Elasticsearch的前身:Compass,由Shay Banon在2004年创造出来的;Shay Banon在2010年2月发布了Elasticsearch的第一个版本。

img

Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在

Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速

度和可扩展性而闻名,是 Elastic Stack 的核心组件。

Elasticsearch 用途用例

Elasticsearch 在速度和可扩展性方面都表现出色(可高度伸缩及扩展),而且还能够索引多种类型的内容,这意味着其可用于多种用例:

  • 应用程序搜索
  • 网站搜索
  • 企业搜索
  • 日志处理和分析
  • 基础设施指标和容器监测
  • 应用程序性能监测
  • 地理空间数据分析和可视化
  • 安全分析
  • 业务分析

Elasticsearch 的工作原理

原始数据会从多个来源(包括日志、系统指标和网络应用程序)输入到 Elasticsearch 中。数据采集指在 Elasticsearch 中进行索引之前解析、标准化并充实这些原

始数据的过程。这些数据在 Elasticsearch 中索引完成之后,用户便可针对他们的数据运行复杂的查询,并使用聚合来检索自身数据的复杂汇总。在 Kibana 中,

用户可以基于自己的数据创建强大的可视化,分享仪表板,并对 Elastic Stack 进行管理。

Elasticsearch 索引

  • Elasticsearch 索引指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据。每个文档都会在一组(字段或属性的名称)和它们对应的值(字符串、数字、布尔值、日期、数值组、地理位置或其他类型的数据)之间建立联系。

  • Elasticsearch 使用的是一种名为倒排索引的数据结构,这一结构的设计可以允许十分快速地进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。

  • 在索引过程中,Elasticsearch 会存储文档并构建倒排索引,这样用户便可以近实时地对文档数据进行搜索。索引过程是在索引 API 中启动的,通过此 API 您既可向特定索引中添加 JSON 文档,也可更改特定索引中的 JSON 文档。

Elasticsearch 优势

  • Elasticsearch 很快。由于 Elasticsearch 是在 Lucene 基础上构建而成的,所以在全文本搜索方面表现十分出色。Elasticsearch 同时还是一个近实时的搜索平台,这意味着从文档索引操作到文档变为可搜索状态之间的延时很短,一般只有一秒。因此,Elasticsearch 非常适用于对时间有严苛要求的用例,例如安全分析和基础设施监测。

  • Elasticsearch 具有分布式的本质特征。Elasticsearch 中存储的文档分布在不同的容器中,这些容器称为分片,可以进行复制以提供数据冗余副本,以防发生硬件故障。Elasticsearch 的分布式特性使得它可以扩展至数百台(甚至数千台)服务器,并处理 PB 量级的数据。

  • Elasticsearch 包含一系列广泛的功能。除了速度、可扩展性和弹性等优势以外,Elasticsearch 还有大量强大的内置功能(例如数据汇总和索引生命周期管理),可以方便用户更加高效地存储和搜索数据。

  • Elastic Stack 简化了数据采集、可视化和报告过程。通过与 Beats 和 Logstash 进行集成,用户能够在向 Elasticsearch 中索引数据之前轻松地处理数据。同时,Kibana 不仅可针对 Elasticsearch 数据提供实时可视化,同时还提供 UI 以便用户快速访问应用程序性能监测 (APM)、日志和基础设施指标等数据。

Elasticsearch 支持的编程语言

Elasticsearch 支持多种编程语言,目前提供针对下列编程语言的官方客户端:

  • Java
  • JavaScript (Node.js)
  • Go
  • .NET (C#)
  • PHP
  • Perl
  • Python
  • Ruby

Elasticsearch 核心概念

近实时

一个近实时(Near Real Time,NRT)的数据搜索和分析平台。从索引文档到可搜索文档很微小的延迟(通常是1s以内)。

集群

  • 一个集群由多个节点(node)组成,节点共同拥有完整的数据,并且可以跨节点提供联合索引、搜索和分析功能。
  • 集群由唯一的名称来进行标识:elasticsearch.yml配置文件中的cluster.name参数,节点只能通过集群名称加入集群,不同环境应该使用不同的集群名称,否则会导致节点加入错误的集群,集群最少都有一个节点,不然是无效的。

image-20220415154257883

节点

运行Elasticsearch的一个实例,多个节点组成集群

  • 存储数据
  • 参数集群的索引、搜索、分析
  • 由一个名称标识

索引

具有某种相似特性的文档的集合;(index)由一个名称(必须是小写)标识,当对其中的文档执行索引、搜索、更新、删除操作时候,该名称指向这个特定的索引,单个集群,可以定义任意多个索引。

文档

文档(document)是可以被索引的基本信息单元。例如,可以为单个客户创建一个文档,为单个产品创建另一个文档,以及为单个订单创建另一个文档。文档以

JSON表示,JSON是一种普遍存在的Internet数据交换格式。在单个索引中,理论上可以存储任意多的文档。

分片和副本

  • 索引可能会存储大量数据,这些数据可能会超出单个节点的硬件限制。例如,占用1TB磁盘空间的10亿个文档的单个索引可能超出单个节点的磁盘容量,或者速度太慢,无法满足搜索请求的性能要求。为了解决这个问题,Elasticsearch提供了将索引水平切分为多段(称为分片,shard)的能力。创建索引时,只需定义所需的分片数量。每个分片本身就是一个具有完全功能的独立“索引”,可以分布在集群中的任何节点上。

  • 分片的重要性:

    • 分片可以水平拆分数据,实现大数据存储和分析。

    • 可以跨分片(可能在多个节点上)进行分发和并行操作,从而提高性能和吞吐量。

    • 如何分配分片以及如何将其文档聚合回搜索请求的机制完全由Elasticsearch管理,并且对用户是透明的。

  • 副本;在随时可能发生故障的网络或云环境中,如果某个分片或节点以某种方式脱机或因何种原因丢失,则强烈建议用户使用故障转移机制。为此Elasticsearch提出了将索引分片复制一个或多个拷贝,称为副本(replica)。副本的重要性:

    • 副本在分片或节点发生故障时提供高可用性。因此,需要注意的是,副本永远不会分配到复制它的原始主分片所在的节点上。也就是分片和对应的副本不可在同一节点上。
    • 通过副本机制,可以提高搜索性能和水平扩展吞吐量,因为可以在所有副本上并行执行搜索。总之,每个索引可以分割成多个分片。每个分片可以有零个或多个副本。
  • 创建索引时可指定每个索引分片和副本的数量,可以动态更改副本的数量;可以使用shrink和_split API更改索引的分片数量,但是不推荐这种更改分片的做法,更改分片数量最好是重建索引,重新定义分片数量,所以需要注意的是:预先评估准确的分片数量才是最佳方法。

  • 分片和副本功能机制是Elasticsearch实现分布式、动态扩展、高并发、高容错的核心。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch 笔记 的相关文章

随机推荐

  • plt.show无法显示图片

    省流 Linux系统本来就没有图形界面 import matplotlib pyplot as plt plt savefig img png 引号里是保存的路径 像此处示例就是相对路径 保存在当前文件夹 远程服务器连接Linux系统 则保
  • SpringAOP+自定义注解实现日志功能

    SpringAOP 自定义注解实现日志功能 上篇文章讲解了springAOP实现简单日志功能 这次讲解使用自定义注解实现日志功能 具体pom Spring SpringMVC的配置不再进行讲解 详情点击链接查看SpringAOP Aspec
  • 前端性能优化之Gzip

    前端性能优化之Gzip 什么是GZIP gzip是GNUzip的缩写 它是一个GNU自由软件的文件压缩程序 它是Jean loupGailly和MarkAdler一起开发的 压缩原理 Gzip 压缩背后的原理 是在一个文本文件中找出一些重复
  • Flutter 23: 图解 PopupMenu 那些事儿

    小菜需要处理标题栏弹出对话框 PopupMenu 样式 Flutter 当然提供了一些处理方式 类似 PopupMenuEntry 等 小菜仅就最基础的使用方式进行初步的学习和整理 PopupMenuItem 基本样式 PopupMenuI
  • 同态加密的基本概念

    所谓的同态加密 HE homomorphic encryption 是指 对明文m加密 得到密文c 满足f c 是f m 的密文 其中f是任意属于某个函数族F的函数 明文可以是单个明文 也可以是明文向量 对应的为单个密文和密文向量 而对应的
  • JAVA多线程之当一个线程在执行死循环时会影响另外一个线程吗?

    一 问题描述 假设有两个线程在并发运行 一个线程执行的代码中含有一个死循环如 while true 当该线程在执行while true 中代码时 另一个线程会有机会执行吗 二 示例代码 代码来源于互联网 1 public class Ser
  • redis的有序集合在score相同的情况 下是如何排序的

    前两天倒腾redis的有序集合时 自己发现了一个问题 redis的有序集合在score相同的情况 下是如何排序的 通过谷歌搜索 发现了一些线索 在score相同的情况下 redis使用字典排序 不过不是太明白什么是字典排序 这就是非科班出生
  • TortoiseSVN安装及使用方法

    安装说明 首先安装SVN客户端 windows一般选择乌龟客户端https tortoisesvn net downloads html 根据系统位数选择相应客户端进行安装 如果你喜欢用命令行操作 请务必记得勾选command line c
  • Python中PyEcharts库安装报错的解决办法

    如果安装pyecharts后 进行导包操作 如from pyecharts import Line 报错 出现类似connot import name Line 问题 那么下面给出了解决办法 方法一 通过查看包安装位置发现 在pyechar
  • 解决关闭hbase时stop-hbase.sh报错stopping hbasecat: /tmp/hbase-xxxx-master.pid: No such file or directory

    完整报错是 stopping hbasecat tmp hbase xxxx master pid No such file or directory 解决方法 sudo mkdir p var hadoop pids 然后进入hbase的
  • 利用wireshark对TCP抓包分析

    抓包结果已上传可免费下载对应观看 wireshark抓包结果 一 流程梳理 我的机子192 168 1 131简称A与服务端机子223 166 138 30简称B先三次握手建立TCP连接 再进行HTTP请求 最后四次挥手断开TCP连接 1
  • 如何使用QT?步骤详解

    1 首先第一步 电脑上安装qt软件 我这里安装的是qt5 5中文版本的 2 打开qt 点击左上角欢迎图标 或者也可选择文件栏目创建一个新的工程目录 3 选择New Project 如果你要使用QT来写代码c或者c 都可以选择 非QT项目栏
  • 解决Unity鼠标坐标点转成世界坐标系坐标点

    第一种 这是一种发射线 获取当前点击的物体 具有碰撞器 的坐标点 也就是碰撞器范围的坐标点 if Input GetMouseButtonDown 0 RaycastHit hitt new RaycastHit Ray ray Camer
  • c++中 string与string.h 的作用、区别和C++头文件的现状

    示例1 include
  • 根据经纬度求两点间距离实现源码(C#)-非常精确

    从Google Map上弄来的根据经纬度求地球表面两点间距离的实现 稍微改编了一下 对于我国境内空间距离计算 该实现已经够用 以米为单位 Net2 0 C 实现 public static double DistanceOfTwoPoint
  • KALI安装Pycharm

    由于直接在KALI中下载Pycharm速度往往不太理想 所以可以在本机内提前安装 再传输进KALI Pycharm下载地址 Download PyCharm Python IDE for Professional Developers by
  • 怎么样利用栅格数据分类后的结果以行政区域统计各个地类的面积

    怎么样利用栅格数据分类后的结果以行政区域统计各个地类的面积 通常在土地利用调查工作中 基于一张已经分类好的栅格数据 遥感图像数据 政府部门有需求去统计一个县或者一个乡的各类型土地的面积 如下图所示 不同的颜色代表不同的土地类型 一般 行政区
  • Python编程从入门到实践(四)-if语句

    1 一个简单示例 假设你有一个汽车列表 并想将其中每辆汽车的名称打印出来 对于大多数汽车 都应以首字母大写的方式打印其名称 但对于汽车名 bmw 应以全大写的方式打印 下面的代码遍历一个列表 并以首字母大写的方式打印其中的汽车名 但对于汽车
  • Unity3D之触摸输入单击与双击研究

    新建一个plane物体 tag设为Terrain 新建一个Cube物体 添加Rigidbody组件 tag设为Player 创建一个脚本TouchTest02 将该脚本挂到Cube物体上 本示例实现如下效果 当单击触摸屏时Cube移动到指定
  • Elasticsearch 笔记

    文章目录 Elasticsearch 基础 Lucene 简介 Elasticsearch 是什么 Elasticsearch 用途用例 Elasticsearch 的工作原理 Elasticsearch 索引 Elasticsearch