Elasticsearch(简称 ES)是一个基于 Lucene 的开源、分布式、实时的搜索与数据分析引擎。它支持海量数据的存储、快速检索、复杂聚合分析,以及全文搜索、结构化搜索和地理空间搜索等能力。ES 使用 RESTful API 接口,支持 JSON 格式数据交互,能够轻松扩展到数百台节点,处理 PB 级数据。
ES 概念 | MySQL 类比 | 说明 |
索引(Index) | 数据库/表 | 一类文档的集合,类似数据库中的表,名称必须小写。 |
文档(Document) | 行/记录 | 最小数据单元,以 JSON 格式存储。 |
字段(Field) | 列 | 文档中的一个属性,有自己的数据类型。 |
映射(Mapping) | 表结构定义 | 定义字段类型、是否分词、索引规则等。 |
分片(Shard) | 分区 | 索引数据被水平切分,分布在不同节点,支持扩展和并行查询。 |
副本(Replica) | 副本/备份 | 主分片的备份,提高高可用性和查询吞吐量。 |
节点(Node) | 服务器实例 | 一个 ES 实例,可以存储数据、参与索引和查询。 |
集群(Cluster) | 数据库集群 | 多个节点组成,共同对外提供服务。 |
注:Type 类型在 ES 7.x 之后已废弃,6.x 仅支持一个 Type。
ES 依赖 Java,推荐 JDK 1.8+:
sudo yum install java-1.8.0-openjdk -y
java -versionwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.1-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.12.1-linux-x86_64.tar.gz
cd elasticsearch-7.12.1编辑 config/elasticsearch.yml,修改如下:
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node./bin/elasticsearch -d浏览器访问 http://localhost:9200,返回 JSON 信息即成功。
倒排索引是 ES 实现高效全文检索的核心数据结构。它将“文档 → 词”的正向关系,转换为“词 → 文档”的倒排关系,从而极大提升搜索效率。
假设有文档:
倒排索引结构如下:
词 | 文档列表 |
Elasticsearch | Doc1, Doc2 |
是 | Doc1 |
搜索引擎 | Doc1 |
使用 | Doc2 |
倒排索引 | Doc2 |
搜索“倒排索引”时,直接定位到 Doc2,无需遍历所有文档。 |
PUT /products
{
"mappings": {
"properties": {
"title": { "type": "text" },
"price": { "type": "double" },
"created_at": { "type": "date" }
}
}
}POST /products/_doc/1
{
"title": "iPhone 13",
"price": 7999,
"created_at": "2021-09-15"
}GET /products/_doc/1GET /products/_search
{
"query": {
"match": { "title": "iPhone" }
}
}DELETE /products/_doc/1
DELETE /productsElasticsearch 是一个强劲、易用的分布式搜索引擎,通过倒排索引实现毫秒级搜索响应。掌握索引、文档、映射、分片等核心概念,以及基本的 RESTful API 操作,即可快速入门。结合 Kibana 可视化工具,能更高效地进行数据分析与运维管理。