目录
一、Elasticsearch简介
Elasticsearch是一个开源的分布式搜索和分析引擎,基于Apache Lucene构建。它能实现:
实时数据搜索
复杂数据分析
海量数据存储(PB级)
核心特性:
分布式架构
RESTful API
近实时搜索(NRT)
多租户支持
二、环境快速搭建
1. 单节点本地部署(Docker版)
# 拉取镜像(以8.9.0版本为例)
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.9.0
# 启动容器(开发模式)
docker run -d --name es-node01 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
elasticsearch:8.9.0
2. 验证安装
访问 http://localhost:9200
看到如下响应说明成功:
{
"name" : "es-node01",
"cluster_name" : "docker-cluster",
"version" : {
"number" : "8.9.0",
"build_flavor" : "default"
},
"tagline" : "You Know, for Search"
}
三、核心概念图解
与传统数据库对比
SQL术语 | Elasticsearch术语 |
---|---|
Database | Index |
Table | Type(已废弃) |
Row | Document |
Column | Field |
Schema | Mapping |
架构概念说明
Node:运行ES实例的服务器
Cluster:多个节点的集合
Shard:索引的分片(默认主分片数:1)
Replica:分片的副本(默认副本数:1)
四、REST API基础操作
1. 索引管理
创建索引(包含自定义mapping):
PUT /books
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"title": { "type": "text" },
"author": { "type": "keyword" },
"price": { "type": "double" },
"publish_date": { "type": "date" }
}
}
}
查看索引信息:
GET /books/_settings
GET /books/_mapping
2. 文档CRUD操作
插入文档:
POST /books/_doc/1
{
"title": "Elasticsearch权威指南",
"author": "Clinton Gormley",
"price": 89.90,
"publish_date": "2015-01-01"
}
查询文档:
GET /books/_doc/1
更新文档:
POST /books/_update/1
{
"doc": {
"price": 79.90
}
}
删除文档:
DELETE /books/_doc/1
五、基础搜索实战
1. 全文搜索
GET /books/_search
{
"query": {
"match": {
"title": "权威指南"
}
}
}
2. 精确匹配
GET /books/_search
{
"query": {
"term": {
"author.keyword": "Clinton Gormley"
}
}
}
3. 范围查询
GET /books/_search
{
"query": {
"range": {
"price": {
"gte": 50,
"lte": 100
}
}
}
}
4. 组合查询
GET /books/_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "指南" } }
],
"filter": [
{ "range": { "price": { "lte": 100 } } }
]
}
}
}
六、常用辅助工具
1. Kibana Dev Tools
提供可视化交互界面,内置控制台可直接执行ES查询:
2. Cerebro集群管理工具
实时查看集群状态
执行索引管理操作
节点监控
七、新手常见问题
1. 索引创建失败
错误现象:
{
"error": {
"root_cause": [
{
"type": "resource_already_exists_exception",
"reason": "index [books/xxxx] already exists"
}
]
}
}
解决方案:
删除已有索引:
DELETE /books
修改索引名称重新创建
2. 字段类型不匹配
错误示例:
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "failed to parse field [price] of type [double]"
}
]
}
}
预防措施:
提前定义好mapping
使用
ignore_malformed
参数忽略格式错误
八、下一步学习建议
掌握Analyzer分词原理
学习聚合(Aggregation)分析
了解索引生命周期管理(ILM)
探索Elastic Stack生态(Logstash、Beats)
资源推荐:
《Elasticsearch实战》