ES基础概念架构
介绍
Elasticsearch (ES) 是一个开源的分布式搜索和分析引擎,它基于 Apache Lucene,并提供了一个RESTful API以与其交互。ES是构建在Java上的,它提供了一个高度可扩展的分布式架构,具有实时性能和高可用性。ES的主要用途包括全文搜索、日志分析、实时数据分析等。
本文将介绍ES的基础概念和架构,并提供一些示例代码来帮助读者更好地理解。
ES基础概念
索引
在ES中,索引是指存储和组织数据的逻辑容器。它类似于关系数据库中的数据库,可以包含多个类型。每个索引都有一个唯一的名称,用于在集群中标识和访问数据。
以下是一个创建名为"my_index"的索引的示例代码:
PUT /my_index
文档
文档是ES中的基本数据单元,可以是JSON、XML或其他格式的数据。每个文档都有一个唯一的ID,用于在索引中标识和检索数据。
以下是一个将文档添加到名为"my_index"的索引的示例代码:
POST /my_index/_doc
{
"title": "Elasticsearch Introduction",
"content": "This is a sample document for Elasticsearch introduction."
}
映射
映射定义了索引中每个字段的类型和属性。它类似于关系数据库中的表结构定义。ES使用动态映射来自动推断字段类型,但也可以显式指定映射。
以下是一个创建映射的示例代码:
PUT /my_index/_mapping
{
"properties": {
"title": {
"type": "text"
},
"content": {
"type": "text"
}
}
}
检索
ES提供了丰富的检索功能,可以根据各种条件过滤和排序结果。它支持全文搜索、前缀搜索、通配符搜索等。
以下是一个根据关键字检索文档的示例代码:
GET /my_index/_search
{
"query": {
"match": {
"title": "Elasticsearch"
}
}
}
ES架构
ES的架构是分布式的,它将数据划分为多个分片,每个分片可以在集群中的不同节点上进行复制和存储。这种分片和复制机制提供了高可用性和横向扩展性。
以下是一个ES集群的简化架构示意图:
gantt
dateFormat YYYY-MM-DD
title ES Cluster Architecture
section Master Node
Master Node :a1, 2022-01-01, 30d
section Data Nodes
Data Node 1 :a2, after a1, 30d
Data Node 2 :a3, after a2, 30d
Data Node 3 :a4, after a3, 30d
section Client
Client Node :a5, after a4, 30d
ES集群通常由一个主节点、多个数据节点和一个客户端节点组成。主节点负责分配和管理索引、分片和复制。数据节点存储索引的分片和副本。客户端节点用于与集群进行交互。
示例代码
以下是一个使用Python库elasticsearch-py与ES进行交互的示例代码:
from elasticsearch import Elasticsearch
# 创建ES客户端
es = Elasticsearch("http://localhost:9200")
# 创建索引
es.indices.create(index="my_index")
# 添加文档
doc = {
"title": "Elasticsearch Introduction",
"content": "This is a sample document for Elasticsearch introduction."
}
es.index(index="my_index", id=1, body=doc)
# 检索文档
res = es.search(index="my_index", body={"query": {"match": {"title": "Elasticsearch"}}})
for hit in res['hits']['hits']:
print(hit
















