基本概念
有几个概念是Elasticsearch的核心。从一开始就理解这些概念将极大地帮助简化学习过程。
一、近实时(NRT)
Elasticsearch是一个近乎实时的搜索平台。这意味着从索引文档到可搜索文档之间有一个轻微的延迟(通常是一秒钟)。
二、集群(Cluster)
集群是一个或多个节点(服务器)的集合,它们一起保存您的整个数据,并跨所有节点提供联邦索引和搜索功能。集群由一个惟一的名称标识,默认情况下该名称是“elasticsearch”。这个名称很重要,因为只有将节点设置为按其名称加入集群时,节点才能成为集群的一部分。
确保不要在不同的环境中重用相同的集群名称,否则可能会导致节点加入错误的集群。例如,您可以对开发、测试和生产集群使用logging-dev、logging-stage和logging-prod。
请注意,只有一个节点的集群是有效的,而且非常好。此外,您还可以拥有多个独立的集群,每个集群都有自己独特的集群名称。
三、节点(Node)
节点是一个服务器,它是集群的一部分,存储数据,并参与集群的索引和搜索功能。与集群一样,节点也是通过名称来标识的,默认情况下,名称是在启动时分配给节点的随机全局惟一标识符(UUID)。如果不需要缺省值,可以定义任何需要的节点名称。对于您想要标识网络中的哪些服务器对应于Elasticsearch集群中的哪些节点的管理目的,这个名称非常重要。
可以通过集群名称将节点配置为连接特定的集群。默认情况下,每个节点都被设置为加入一个名为“elasticsearch”的集群,这意味着如果您启动网络上的多个节点——假设它们能够彼此发现——它们将自动形成并加入一个名为elasticsearch的集群。
在单个集群中,您可以拥有任意多的节点。此外,如果您的网络上没有其他运行的Elasticsearch节点,那么默认情况下,启动单个节点将形成一个名为“elasticsearch"的新单节点集群。
四、索引(Index)
索引是具有某种类似特征的文档集合。例如,可以为客户数据建立索引,为产品目录建立另一个索引,为订单数据建立另一个索引。索引由名称标识(必须全部为小写),当对其中的文档执行索引、搜索、更新和删除操作时,此名称用于引用索引。
在一个集群中,您可以定义任意多的索引。
五、类型(Type)【在V6.0.0中弃用了】
注意:
在Elasticsearch 7.0.0或更高版本中创建的索引不再接受_default_映射。索引在6中创建。x将继续在Elasticsearch 6.x中运行。类型在api 7.0中是不受支持的,它会中断对索引创建、put映射、get映射、put模板、get模板和get字段映射api的更改。
什么是映射类型?(What are mapping types ?)
自从第一次发布Elasticsearch以来,每个文档都存储在一个索引(Index)中,并分配了一个映射类型(mapping type)。映射类型用于表示被索引的文档或实体的类型(Type),例如twitter索引可能具有用户类型和tweet类型。
每个映射类型都可以有自己的字段,因此用户类型可以有full_name字段、user_name字段和电子邮件字段,而tweet类型可以有内容字段、tweeted_at字段,和用户类型一样,还有user_name字段。
每个文档都有一个包含类型名称的_type元字段,通过在URL中指定类型名称,可以将搜索限制为一个或多个类型
GET twitter/user,tweet/_search { "query": { "match": { "user_name": "kimchy" } } }
_type字段与文档的_id相结合生成_uid字段,因此具有相同_id的不同类型的文档可以存在于一个索引中。
还使用映射类型在文档之间建立父子关系,因此类型为question的文档可以是类型为answer的文档的父文档。
为什么弃用了(Why are mapping types being removed?)
最初,我们讨论了类似于SQL数据库中的“数据库”的“索引”,以及等价于“表”的“类型”。
这是一个错误的类比,导致了错误的假设。在SQL数据库中,表是相互独立的。一个表中的列与另一个表中具有相同名称的列没有关系。这与映射类型中的字段不同。
在Elasticsearch索引中,不同映射类型中具有相同名称的字段在内部由相同的Lucene字段支持。换句话说,使用上面的示例,user类型中的user_name字段存储在与tweet类型中的user_name字段完全相同的字段中,而且两个user_name字段在这两种类型中必须具有相同的映射(定义)。
例如,当您想要删除一个类型中的日期字段和同一个索引中的另一个类型中的布尔字段时,这可能会导致失败。
最重要的是,存储在同一索引中具有很少或没有共同字段的不同实体会导致数据稀疏,并影响Lucene有效压缩文档的能力。
基于这些原因,我们决定将映射类型的概念从Elasticsearch中移除。
五、文档(Document)
文档是可以建立索引的基本信息单元。例如,您可以为单个客户创建一个文档,为单个产品创建另一个文档,为单个订单创建另一个文档。该文档用JSON (JavaScript对象表示法)表示,这是一种无处不在的internet数据交换格式。在索引中,可以存储任意数量的文档。
六、分片和副本(Shards & Replicas)
索引可能存储大量数据,这些数据可能超过单个节点的硬件限制。例如,一个包含10亿个文档的索引占用1TB的磁盘空间,这个索引可能不适用于单个节点的磁盘,或者速度太慢,无法满足单个节点的搜索请求。
为了解决这个问题,Elasticsearch提供了将索引细分为多个分片的功能。创建索引时,可以简单地定义所需的分片数量。每个分片本身都是一个功能齐全且独立的“索引”,可以托管在集群中的任何节点上。
分片之所以重要,主要有两个原因:
- 它允许您水平分割/缩放内容卷
- 它允许跨切分(可能在多个节点上)分布和并行化操作,从而提高性能/吞吐量
分片如何分布以及如何将其文档聚合回搜索请求的机制完全由Elasticsearch管理,并且对用户是透明的。
在随时可能出现故障的网络/云环境中,如果分片/节点由于某种原因离线或消失,那么使用故障转移机制是非常有用的,强烈建议使用这种机制。为此,Elasticsearch允许将索引分片的一个或多个副本复制到所谓的复制分片中。
复制之所以重要,主要有两个原因:
- 它在分片/节点失败时提供高可用性。出于这个原因,需要注意的是,复制分片永远不会与复制它的原始/主分片分配在相同的节点上。
- 它允许您扩展搜索量/吞吐量,因为可以在所有副本上并行执行搜索。
总而言之,每个索引可以分成多个分片。索引也可以被复制零次(即没有副本)或多次。复制后,每个索引将具有主分片(从其中复制的原始分片)和复制分片(主分片的副本)。可以在创建索引时为每个索引定义分片和副本的数量。创建索引之后,还可以随时动态更改副本的数量。您可以使用_shrink和_split api更改现有索引的分片数量,但是这不是一项简单的任务,预先计划正确的分片数量是最佳方法。
默认情况下,Elasticsearch中的每个索引分配一个主分片和一个副本,这意味着如果您的集群中至少有两个节点,那么您的索引将有一个主分片和另一个副本分片(一个完整的副本),每个索引总共有两个分片。
相关推荐
**Elasticsearch实战源码详解** Elasticsearch是一款开源的、分布式的全文搜索引擎,由Java编写,设计用于处理海量数据的快速检索。黄申翻译的《Elasticsearch实战》一书,深入浅出地介绍了Elasticsearch的核心概念...
**Elasticsearch实战详解** Elasticsearch是一款基于Lucene的分布式、实时的搜索与分析引擎,广泛应用于日志分析、监控、数据可视化、全文检索等多个领域。它以其强大的搜索性能、高可扩展性和易用性在大数据处理...
- **JVM配置**:Elasticsearch运行在JVM之上,合理的JVM参数配置对于提高系统性能至关重要。 - **索引缓存策略**:利用缓存减少磁盘I/O操作,提升查询速度。 - **批量操作**:批量索引或批量查询相比单次操作能够...
**Elasticsearch基础**:了解文档、索引、搜索和聚合的基本概念。 2. **Logstash使用**:掌握如何配置Logstash收集和处理数据。 3. **Kibana实践**:学习如何使用Kibana进行数据可视化。 4. **集群部署**:了解...
《SpringBoot整合Elasticsearch实战详解》 在现代大数据处理和搜索引擎领域,Elasticsearch(简称ES)以其高效、易用的特点受到了广泛欢迎。而SpringBoot作为Java开发中的轻量级框架,以其快速构建应用的能力,成为...
1. **基础介绍**:包括ElasticSearch的基本概念、架构设计原理、与其他搜索解决方案的对比等。 2. **安装配置**:详细讲解如何在不同操作系统(如Windows、Linux)上安装ElasticSearch,并进行基本配置。 3. **核心...
- **Elasticsearch架构**:详解ES的分片、副本、节点和集群的概念,以及它们如何协同工作以实现高可用性和弹性扩展。 - **RESTful API**:讲解如何通过HTTP接口与ES进行交互,包括索引、搜索、更新、删除等操作。 ...
这些知识点主要围绕着Elasticsearch的高级应用和技术深入展开,旨在帮助那些已经具备一定基础的用户进一步提升其技能水平。 ### Elasticsearch简介 Elasticsearch是一个基于Lucene的开源搜索和分析引擎,它能够...
《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》是一本针对Android平台多媒体开发的详尽指南,旨在帮助Android程序员、研发人员以及对此领域感兴趣的爱好者掌握核心技能,从基础到高级,从理论到实践...
《SpringBoot整合Elasticsearch搜索引擎实战详解》 在现代的Web开发中,高效的数据检索和分析已经成为不可或缺的一部分。SpringBoot以其简洁的配置、强大的依赖管理和快速的开发效率,深受开发者喜爱。而Elastic...
通过以上内容可以看出,《相关搜索及其在Solr与Elasticsearch中的应用》这本书涵盖了从理论基础到实践案例的全方位知识体系,对于想要深入了解和掌握相关搜索技术的专业人士来说,是一本不可多得的参考书。
- **入门阶段**:学习Elasticsearch的基础概念,包括文档模型、索引管理等。 - **进阶阶段**:深入学习搜索机制和聚合分析功能,掌握复杂的查询和统计方法。 - **实战阶段**:结合实际案例,学习如何使用Logstash...
**Elasticsearch 入门详解** Elasticsearch 是一个基于 Lucene 的开源全文搜索引擎,它以其分布式的实时特性和强大的数据分析能力,广泛应用于日志分析、监控、搜索、信息检索等多个领域。本项目课程将深入探讨 ...
在Android游戏开发技术实战详解中,开发者将深入学习如何利用Android平台构建丰富的游戏应用。这份资源包含各个章节的源码,让学习者能够通过实际操作理解游戏开发的各个环节。以下是一些关键知识点的详细说明: 1....
**Elasticsearch 6 教程详解** Elasticsearch 是一个开源的全文搜索引擎,以其分布式、实时、可扩展性以及强大的数据分析能力而受到广大开发者和企业的青睐。在Elasticsearch 6版本中,它继续优化了性能,提升了...
│ 第十七课Elasticsearch分享-张亚V4.pdf │ 第十三课MySQL5.7高可用架构之Mycat.pdf │ 第十三课MySQL8.0高可用架构之Mycat.pdf │ 第十九课MySQL备份和恢复.pdf │ 第十二课MySQL5.7复制.pdf │ 第十二课MySQL8.0...
**分布式搜索引擎Elasticsearch开发实战基础篇** 在信息化飞速发展的时代,数据量激增,传统的数据库查询方式已经无法满足高效、实时的数据检索需求。此时,分布式搜索引擎如Elasticsearch应运而生,它以其强大的...
本教程旨在帮助用户深入了解Elasticsearch的核心概念和技术细节,适合已经掌握了Elasticsearch基本操作并希望进一步提升技能的开发者。通过本教程的学习,你将能够更加高效地管理和优化Elasticsearch集群,以及利用...