Elasticserch基本概念

本文深入解析Elasticsearch的基本概念,包括集群、节点、分片、索引、类型和文档等关键组件,以及其在数据存储和检索中的作用。

Elasticserch基本概念

在这里插入图片描述

集群

由一个或多个节点组成,对外提供服务

节点

一个节点只能加入一个集群

分片

主分片

副本分片

每个索引可以有多个主分片,一旦建立,不能修改数量。副分片可动态增加,必须和主分片在不同的节点上。

复制功能,搜索可以在所有副本上并行执行

索引

具有相同结构的文档集合

索引名字小写

索引结构:

在这里插入图片描述

类型

在索引中,可以定义一个或多个类型,类型是索引的逻辑分区。一种类型被定义为具有一组公共字段的文档。

比如一个博客系统。可以定义三种类型的数据:用户数据、博客数据、评论数据。(好像mysql的表)

文档

存储在es中的一个JSON格式字符串:存储了零个或多个字段,或者键值对。

每个存储在索引中的一个文档都有一个类型、一个ID(文件的唯一标识,index/type/id必须是唯一的)。

存储在*_source*的字段中。

数据库字段
mysqldatabasetablerow(一行数据)column
mongodatabasecollectiondocument(一个json串)field
esindextype(用户、博客、评论)document(一个json串)field

在这里插入图片描述

来源于书籍《Elasticserch技术解析与实战》

### Elasticsearch基本概念 #### 节点与实例 节点是指一个 Elasticsearch 实例,其本质上是一个 Java 进程。每台机器可以运行多个 Elasticsearch 实例,但在生产环境中通常建议每台机器仅运行一个实例以优化性能和资源管理[^1]。 #### 集群组成 Elasticsearch 是一种分布式搜索引擎,由多个节点共同组成一个集群。一个集群至少包含一个节点,而每个节点都可以拥有多个索引[^4]。 #### 数据存储单元:索引、分片与副本 - **索引**:类似于传统数据库中的表,用于存储文档集合。 - **分片 (Shard)**:为了提高可扩展性和性能,索引被划分为若干个主分片(Primary Shard),这些分片分布在不同的节点上,默认情况下每个索引会被分成 5 个主分片。 - **副本 (Replica)**:每个主分片都有对应的副本分片(Replica Shard),用于提供冗余备份以及增强读取操作的能力。默认情况下,每个主分片都会有一个副本。 #### 数据定位机制 当向 Elasticsearch 插入一条数据时,系统会基于指定的关键字(Key)计算该条记录应归属于哪一个分片。此关键字通常是自动生成的 ID 或者可以根据具体需求设置成其他字段值,例如在某些业务场景下可能选用 `CompanyID` 作为 Key 来实现更精确的数据分布控制[^5]。通过下面这个公式完成分片的选择过程: ```plaintext shard_num = hash(_routing) % num_primary_shards ``` #### 功能特性 Elasticsearch 将全文搜索、结构化查询及数据分析等功能融合为一体,并能高效处理海量级数据集,在接近实时的时间范围内支持复杂的搜索请求和统计分析任务[^2]。它非常适合应用于大规模的日志监控、网站内容检索以及其他需要快速响应的大规模数据访问场合;而对于那些强调严格一致性且涉及较多关联运算的应用,则更适合采用 MySQL 等关系型数据库解决方案[^3]。 ### 示例代码展示如何创建简单的索引 以下是利用 Python 对接 Elasticsearch 并创建新索引的一个例子: ```python from elasticsearch import Elasticsearch es_client = Elasticsearch(["http://localhost:9200"]) index_name = "test_index" if not es_client.indices.exists(index=index_name): settings = { "settings": { "number_of_shards": 3, "number_of_replicas": 1 }, "mappings": { "properties": { "title": {"type": "text"}, "content": {"type": "text"} } } } response = es_client.indices.create(index=index_name, body=settings) print(f"Index created successfully {response}") else: print("Index already exists.") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值