TL;DR
- 场景: ES 零基础入门,快速完成索引创建、文档 CRUD、搜索查询
- 结论: ES 入门简单,3-10 分钟可完成最小示例跑通
- 产出: 完整 CRUD 操作示例、架构概念、错误速查
ES 简单使用
创建索引
PUT http://h121.wzk.icu:9200/wzk_blog01/?pretty
返回结果:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "wzk_blog01"
}
插入文档
POST http://h121.wzk.icu:9200/wzk_blog01/_doc/1?pretty
{"id": "1", "title": "What is lucene"}
返回结果:
{
"_index": "wzk_blog01",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
查询文档
GET http://h121.wzk.icu:9200/wzk_blog01/_doc/1?pretty
返回结果:
{
"_index": "wzk_blog01",
"_id": "1",
"_version": 3,
"_seq_no": 2,
"_primary_term": 1,
"found": true,
"_source": {
"id": "1",
"title": "Apache Spark is a unified analytics engine for large-scale data processing"
}
}
更新文档
POST http://h121.wzk.icu:9200/wzk_blog01/_doc/1?pretty
{"id": "1", "title": " What is elasticsearch"}
返回结果:
{
"_index": "wzk_blog01",
"_id": "1",
"_version": 4,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1
}
搜索文档
POST http://h121.wzk.icu:9200/wzk_blog01/_search?pretty
{"query": {"match": {"title": "What"}}}
返回结果:
{
"query": {
"match": {
"title": "What"
}
}
}
架构与概念
基本简介
Elasticsearch 是一个面向文档(document oriented)的分布式搜索和分析引擎,它能够以文档为单位存储和管理数据。
与关系型数据库对比
| Elasticsearch | MySQL |
|---|---|
| 索引 Index | 数据库 |
| 类型 Type(7.x 已移除) | 表 |
| 文档 Document | 行记录 |
| 字段 Field | 列 |
核心概念
| 概念 | 说明 |
|---|---|
| 索引 Index | 拥有相似特征文档的集合 |
| 类型 Type | 索引的逻辑分类/分区(7.x 后移除) |
| 字段 Field | 数据表的字段 |
| 映射 Mapping | 定义每个字段的类型(表结构) |
| 文档 Document | 可被索引的基础信息单元(JSON) |
| 近实时 NRT | 索引文档到可搜索有轻微延迟(通常1秒内) |
| 集群 Cluster | 多节点组成,共同标识为集群名称 |
| 节点 Node | 一个 ES 实例 |
| 分片 Shard | 索引的水平分片(主分片 + 副本分片) |
| 副本 Replica | 主分片的拷贝,提高恢复能力和性能 |
错误速查
| 症状 | 根因 | 修复 |
|---|---|---|
| ?pertty 无效/报错 | 参数拼写错误 | 改为 ?pretty |
| 创建索引无效 | 用了 GET 访问 /index | 改用 PUT /{index}?pretty |
| 插入文档报 405/400 | 用 GET 发送 JSON | 用 POST/PUT /{index}/_doc/{id} 并放 JSON 到请求体 |
| /{index}/_doc/_search/1 返回异常 | 端点写错 | 按 ID 查:GET /{index}/_doc/{id};搜索:POST /{index}/_search |
| 搜索无结果 | 把查询 DSL 放到”返回结果”而非请求体 | 将 DSL 放请求体,POST /_search |
| HTTP/HTTPS 混用或跨域 | 同域名下 http/https 混搭 | 统一协议;若走浏览器,配置 CORS/反代 |
| 401/403 未授权 | 8.x 默认启用安全 | 启用内置用户/API Key,或在内网/反代鉴权 |
| index_not_found_exception | 索引未创建/名错 | 先 PUT /{index} 再写入;核对小写命名 |
| 版本冲突 version_conflict_engine_exception | 并发更新 | 用 _update 或乐观锁带 if_seq_no/if_primary_term |
| 集群 Red/分片分配失败 | 分片/磁盘问题 | 释放磁盘、修复分片、调整副本数 |