Elasticsearch 笔记 | 入门概念
Posted 小鲸鱼大梦想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch 笔记 | 入门概念相关的知识,希望对你有一定的参考价值。
文章目录
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等项目的发起人,大佬就是不一样
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的第一个版本。
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参数,节点只能通过集群名称加入集群,不同环境应该使用不同的集群名称,否则会导致节点加入错误的集群,集群最少都有一个节点,不然是无效的。
节点
运行Elasticsearch的一个实例,多个节点组成集群
- 存储数据
- 参数集群的索引、搜索、分析
- 由一个名称标识
索引
具有某种相似特性的文档的集合;(index)由一个名称(必须是小写)标识,当对其中的文档执行索引、搜索、更新、删除操作时候,该名称指向这个特定的索引,单个集群,可以定义任意多个索引。
文档
文档(document)是可以被索引的基本信息单元。例如,可以为单个客户创建一个文档,为单个产品创建另一个文档,以及为单个订单创建另一个文档。文档以
JSON表示,JSON是一种普遍存在的Internet数据交换格式。在单个索引中,理论上可以存储任意多的文档。
分片和副本
-
索引可能会存储大量数据,这些数据可能会超出单个节点的硬件限制。例如,占用1TB磁盘空间的10亿个文档的单个索引可能超出单个节点的磁盘容量,或者速度太慢,无法满足搜索请求的性能要求。为了解决这个问题,Elasticsearch提供了将索引水平切分为多段(称为分片,shard)的能力。创建索引时,只需定义所需的分片数量。每个分片本身就是一个具有完全功能的独立“索引”,可以分布在集群中的任何节点上。
-
分片的重要性:
-
分片可以水平拆分数据,实现大数据存储和分析。
-
可以跨分片(可能在多个节点上)进行分发和并行操作,从而提高性能和吞吐量。
-
如何分配分片以及如何将其文档聚合回搜索请求的机制完全由Elasticsearch管理,并且对用户是透明的。
-
-
副本;在随时可能发生故障的网络或云环境中,如果某个分片或节点以某种方式脱机或因何种原因丢失,则强烈建议用户使用故障转移机制。为此Elasticsearch提出了将索引分片复制一个或多个拷贝,称为副本(replica)。副本的重要性:
- 副本在分片或节点发生故障时提供高可用性。因此,需要注意的是,副本永远不会分配到复制它的原始主分片所在的节点上。也就是分片和对应的副本不可在同一节点上。
- 通过副本机制,可以提高搜索性能和水平扩展吞吐量,因为可以在所有副本上并行执行搜索。总之,每个索引可以分割成多个分片。每个分片可以有零个或多个副本。
-
创建索引时可指定每个索引分片和副本的数量,可以动态更改副本的数量;可以使用shrink和_split API更改索引的分片数量,但是不推荐这种更改分片的做法,更改分片数量最好是重建索引,重新定义分片数量,所以需要注意的是:预先评估准确的分片数量才是最佳方法。
-
分片和副本功能机制是Elasticsearch实现分布式、动态扩展、高并发、高容错的核心。
以上是关于Elasticsearch 笔记 | 入门概念的主要内容,如果未能解决你的问题,请参考以下文章