diff --git a/README.md b/README.md
index 2975db0..4014b25 100644
--- a/README.md
+++ b/README.md
@@ -205,6 +205,7 @@ Quick Reference
[Oracle](./docs/oracle.md)
[PostgreSQL](./docs/postgres.md)
[Redis](./docs/redis.md)
+[Elasticsearch](./docs/elasticsearch.md)
## 快捷键
diff --git a/assets/elasticsearch.svg b/assets/elasticsearch.svg
new file mode 100644
index 0000000..47275c7
--- /dev/null
+++ b/assets/elasticsearch.svg
@@ -0,0 +1,5 @@
+
diff --git a/docs/elasticsearch.md b/docs/elasticsearch.md
new file mode 100644
index 0000000..0071ef7
--- /dev/null
+++ b/docs/elasticsearch.md
@@ -0,0 +1,665 @@
+Elasticsearch 备忘清单
+===
+
+这是 [Elasticsearch](https://www.elastic.co/guide/index.html) 的官方文档。 你可以在这里找到 elasticsearch 的所有文档。
+
+Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的,并作为看源软件发布。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
+
+入门
+----
+
+
+### 入门
+
+#### 安装介绍
+
+##### 下载
+
+- 注意
+
+ version 需替换为指定版本
+
+ 官方包有的功能只能试用,完整功能需要付费,请仔细阅读官网文档。
+
+- windows
+
+ 下载地址:
+
+ [https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-\${VERSION}-windows-x86_64.zip](https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-windows-x86_64.zip)
+
+- linux
+
+ ```shell
+ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz
+ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
+ shasum -a 512 -c elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
+ tar -xzf elasticsearch-${VERSION}-linux-x86_64.tar.gz
+ cd elasticsearch-${VERSION}/
+ ```
+
+- macos
+
+ ```shell
+ curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz
+ curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c -
+ tar -xzf elasticsearch-${VERSION}-darwin-x86_64.tar.gz
+ cd elasticsearch-${VERSION}/
+ ```
+
+#### 启动
+
+- 启动 Elasticsearch
+
+ ```shell
+ $ ./bin/elasticsearch
+ ```
+
+- 设置密码
+
+ ```shell
+ export ELASTIC_PASSWORD="your_password"
+ ```
+- 测试是否启动成功
+
+ ```shell
+ curl --cacert $ES_HOME/config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
+ ```
+
+ 成功则返回样例如下:
+
+ ```json
+ {
+ "name" : "Cp8oag6",
+ "cluster_name" : "elasticsearch",
+ "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
+ "version" : {
+ "number" : "${VERSION}",
+ "build_type" : "tar",
+ "build_hash" : "f27399d",
+ "build_flavor" : "default",
+ "build_date" : "2016-03-30T09:51:41.449Z",
+ "build_snapshot" : false,
+ "lucene_version" : "9.10.0",
+ "minimum_wire_compatibility_version" : "1.2.3",
+ "minimum_index_compatibility_version" : "1.2.3"
+ },
+ "tagline" : "You Know, for Search"
+ }
+ ```
+
+
+
+### elasticsearch 和 RDMS 的对比
+
+| RDMS | elasticsearch |
+| ----------------------- | ----------------- |
+| 数据库(database) | 索引(index) |
+| 表(table) | 类型(type) |
+| 行(row) | 文档(document) |
+| 列(column) | 字段(field) |
+| 表结构 | 映射 |
+| 索引 | 全文索引 |
+| SQL | 查询DSL |
+| SELECT * FROM tablename | GET http://... |
+| UPDATE table SET | PUT http://... |
+| DELETE | DELETE http://... |
+
+操作
+----
+
+说明:
+
+ 1. 以 user_info 为索引名称,类比数据库,
+ 2. 字段有 id,username,password,nickname,age,info,remark 为例进行演示。
+
+# DSL语法
+
+## 基础语法规则
+
+`curl -X '://:/?' -d ''`
+
+
+- VERB HTTP 方法:GET, POST, PUT, HEAD, DELETE
+
+- PROTOCOL:http 或者 https 协议(只有在 Elasticsearch 前面有 https 代理的时候可用)
+
+- HOST:Elasticsearch 集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫 localhost
+
+- PORT:Elasticsearch HTTP 服务所在的端口,默认为 9200
+
+- PATH API 路径(例如_count 将返回集群中文档的数量),PATH:可以包含多个组件,例如_cluster/stats 或者_nodes/stats/jvm
+
+- QUERY_STRING:一些可选的查询请求参数,例如?pretty 参数将使请求返回更加美观易读的 JSON 数据
+
+- BODY:一个 JSON 格式的请求主体(如果请求需要的话)
+
+
+
+# 索引的操作
+
+## 创建索引
+
+- 统一请求 api 前缀
+
+ http://localhost:9200/
+
+- DSL语法
+
+ ```shell
+ PUT /user_info
+ {
+ "settings": {
+ "number_of_replicas": 1,
+ "number_of_shards": 1
+ },
+ "mappings": {
+ "properties": {
+ "id": {
+ "type": "long",
+ "index": true
+ },
+ "username": {
+ "type": "keyword",
+ "index": true
+ },
+ "nickname": {
+ "type": "keyword",
+ "index": true
+ },
+ "password": {
+ "type": "keyword",
+ "index": false
+ },
+ "age": {
+ "type": "integer",
+ "index": true
+ },
+ "info": {
+ "type": "text",
+ "index": true
+ },
+ "remark": {
+ "type": "text",
+ "index": true
+ }
+ }
+ }
+ }
+ ```
+
+- curl
+
+ ```shell
+ curl -XPUT "http://localhost:9200/user_info" -H 'Content-Type: application/json' -d'{ "settings": { "number_of_replicas": 1, "number_of_shards": 1 }, "mappings": { "properties": { "id": { "type": "long", "index": true }, "username": { "type": "keyword", "index": true }, "nickname": { "type": "keyword", "index": true }, "password": { "type": "keyword", "index": false }, "age": { "type": "integer", "index": true }, "info": { "type": "text", "index": true }, "remark": { "type": "text", "index": true } } } }'
+ ```
+
+- 参数说明:
+
+ settings:索引信息设置
+
+ number_of_shards:每个索引的主分片数,这个配置在索引创建后不能修改
+
+ number_of_replicas:每个主分片的副本数,这个配置可以随时修改。
+
+ mappings:索引映射定义
+
+ properties:字段定义 properties里是json配置,key为字段名称(自定义名称),value是个嵌套json,type是指定字段的类型。
+
+ -- 其他参数很多,请参考官网资料
+
+## 删除索引
+
+- DSL语法
+
+ ```http
+ DELETE /user_info
+ ```
+
+- curl
+
+ ```shell
+ curl -XDELETE "http://localhost:9200/user_info"
+ ```
+
+
+## 判断索引是否存在
+
+- DSL语法
+
+ ```http
+ # 查看索引是否存在
+ HEAD /user_info
+ ```
+
+- curl
+
+ ```shell
+ # 查看索引是否存在
+ curl -XHEAD "http://localhost:9200/user_info"
+ ```
+
+## 开启/关闭索引
+
+- 开启DSL语法
+
+ ```http
+ # 开启索引
+ POST /user_info/_open
+ ```
+
+- curl
+
+ ```shell
+ # 开启索引
+ curl -XPOST "http://localhost:9200/user_info/_open"
+ ```
+
+- 关闭DSL语法
+
+ ```http
+ # 关闭索引
+ POST /user_info/_close
+ ```
+
+- curl
+
+ ```shell
+ # 关闭索引
+ curl -XPOST "http://localhost:9200/user_info/_close"
+ ```
+
+
+
+## 索引的别名
+
+- 添加别名DSL语法
+
+ ```http
+ # 添加别名
+ POST /user_info/_alias/user1
+ ```
+
+- 添加别名curl
+
+ ```shell
+ # 添加别名
+ curl -XPOST "http://localhost:9200/user_info/_alias/user1"
+ ```
+
+
+- 删除别名DSL语法
+
+ ```http
+ # 删除别名
+ DELETE /user_info/_alias/user1
+ ```
+
+- 删除别名curl
+
+ ```shell
+ # 删除别名
+ curl -XDELETE "http://localhost:9200/user_info/_alias/user1"
+ ```
+
+- 查看别名DSL语法
+
+ ```http
+ # 查看别名
+ GET /_alias/user1
+ ```
+
+
+- 查看别名curl
+
+ ```shell
+ # 查看别名
+ curl -XGET "http://localhost:9200/_alias/useraa"
+ ```
+
+## mapping 操作
+
+类似修改数据库中列的操作
+
+### 查看 mapping
+
+- DSL语法
+
+ ```http
+ # 查看mapping
+ GET /user_info/_mapping
+ ```
+
+- curl
+
+ ```shell
+ # 查看mapping
+ curl -XGET "http://localhost:9200/user_info/_mapping"
+ ```
+
+### 新增 mapping
+
+- 注意
+
+ **需要注意的是字段映射只能增加,不能更改删除**
+
+- DSL语法
+
+ ```http
+ # 新增mapping
+ PUT /user_info/_mapping
+ {
+ "properties":{
+ "sex":{
+ "type":"keyword"
+ }
+ }
+ }
+ ```
+
+- curl
+
+ ```shell
+ # 新增mapping
+ curl -XPUT "http://localhost:9200/user_info/_mapping" -H 'Content-Type: application/json' -d'{ "properties":{ "sex":{ "type":"keyword" } } }'
+ ```
+
+# 文档的操作
+
+## 添加文档
+- DSL语法
+
+ ```http
+ # 新增一条数据
+ POST /user_info/_doc/1
+ {
+ "id":1,
+ "username":"username",
+ "password":"123456",
+ "nickname":"nickname",
+ "age":18,
+ "info":"一些个人相关的介绍",
+ "remark":"备注信息",
+ "sex":"男"
+ }
+ ```
+
+- curl
+
+ ```shell
+ # 新增一条数据
+ curl -XPOST "http://localhost:9200/user_info/_doc/1" -H 'Content-Type: application/json' -d'{ "id":1, "username":"username", "password":"123456", "nickname":"nickname", "age":18, "info":"一些个人相关的介绍", "remark":"备注信息", "sex":"男" }'
+ ```
+
+
+## 查询指定索引的所有文档
+
+- 类似数据库中的 `select * from user_info;`
+
+- DSL语法
+
+ ```http
+ GET /user_info/_search
+ {
+ "query": {
+ "match_all": {}
+ }
+ }
+ ```
+
+- curl
+
+ ```shell
+ curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "match_all": {} } }'
+ ```
+
+## 通过 id 查询文档
+
+- 类似数据库中的 `select * from user_info where id = 1;`
+
+- DSL语法
+
+ ```http
+ # 通过id查询
+ GET /user_info/_doc/1
+ ```
+
+- curl
+
+ ```shell
+ # 通过id查询
+ curl -XGET "http://localhost:9200/user_info/_doc/1"
+ ```
+
+
+## 通过条件查询文档
+
+### 精确查找
+
+- 类似数据库中的 `select * from user_info where username = 'username';`
+
+- DSL语法
+
+ ```http
+ # 通过条件查询
+ GET /user_info/_search
+ {
+ "query": {
+ "bool": {
+ "must": [
+ { "term": { "username": "username" } }
+ ]
+ }
+ }
+ }
+ ```
+
+- curl
+
+ ```shell
+ # 通过条件查询
+ curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "term": { "username": "username" } } ] } } }'
+ ```
+
+### 模糊查找
+
+- 类似数据库中的模糊查询 `select * from user_info where info like '%人%';`
+
+- DSL语法
+
+ ```http
+ # 模糊查找
+ GET /user_info/_search
+ {
+ "query": {
+ "match": {
+ "info": "人"
+ }
+ }
+ }
+ ```
+
+
+
+### 范围查找
+
+- 类似数据库中的范围查询 `select * from user_info where age between 18 and 30;`
+
+- DSL语法
+
+ ```http
+ GET /user_info/_search
+ {
+ "query": {
+ "range": {
+ "age": {
+ "gt": 18,
+ "lt": 30
+ }
+ }
+ }
+ }
+ ```
+
+- curl
+
+ ```shell
+ curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "range": { "age": { "gt": 18, "lt": 30 } } } }'
+ ```
+
+### limit 查找
+
+- 类似数据库中的 limit 查询 `select * from user_info limit 10;`
+
+- DSL语法
+
+ ```http
+ GET /user_info/_search
+ {
+ "size": 10,
+ "query": {
+ "match_all": {}
+ }
+ }
+ ```
+
+- curl
+
+ ```shell
+ curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 1, "query": { "match_all": {} } }'
+ ```
+
+### limit offset 查找
+
+- 类似数据库中的 limit 查询 `select * from user_info limit 0,10;`
+
+- DSL语法
+
+ ```http
+ GET /user_info/_search
+ {
+ "size": 2,
+ "from": 1,
+ "query": {
+ "match_all": {}
+ }
+ }
+ ```
+
+- curl
+
+ ```shell
+ curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 2, "from": 1, "query": { "match_all": {} } }'
+ ```
+
+- 参数说明
+
+ - "size": 10表示我们想要返回的结果数量是10条。
+ - "from": 20表示我们想要从结果集中的第21条记录开始返回(因为偏移是从0开始的)。
+ - "query": `{"match_all": {}}` 是一个匹配所有文档的查询,因为我们没有特定的查询条件,只是想要分页结果。
+
+### and 查询
+
+- 类似数据库中的 and 查询 `select * from user_info where age > 18 and sex = '男';`
+
+- DSL语法
+
+ ```http
+ GET /user_info/_search
+ {
+ "query": {
+ "bool": {
+ "must": [
+ { "range": { "age": { "gt": 18 } } },
+ { "term": { "sex": "男" } }
+ ]
+ }
+ }
+ }
+ ```
+
+- curl
+
+ ```shell
+ curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "range": { "age": { "gt": 17 } } }, { "term": { "sex": "男" } } ] } } }'
+ ```
+
+### or 查询
+
+- 类似数据库中的 or 查询 `select * from user_info where age > 18 or sex = '男';`
+
+- DSL语法
+
+ ```http
+ GET /user_info/_search
+ {
+ "query": {
+ "bool": {
+ "should": [
+ {
+ "range": {
+ "age": {
+ "gt": 18
+ }
+ }
+ },
+ {
+ "term": {
+ "sex": "男"
+ }
+ }
+ ]
+ }
+ }
+ }
+ ```
+
+- curl
+
+ ```shell
+ curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "should": [ { "range": { "age": { "gt": 18 } } }, { "term": { "sex": "男" } } ] } } }'
+ ```
+
+
+## 删除文档
+
+### 删除指定 id
+
+- 类似数据库中的 delete 查询 `delete from user_info where id = 3;`
+
+- DSL语法
+
+ ```http
+ # 删除文档
+ DELETE /user_info/_doc/3
+ ```
+
+- curl
+
+ ```shell
+ # 删除文档
+ curl -XDELETE "http://localhost:9200/user_info/_doc/3"
+ ```
+
+### 删除指定条件
+
+- 类似数据库中的 delete 查询 `delete from user_info where age > 18;`
+
+- DSL语法
+
+ ```http
+ POST /user_info/_delete_by_query
+ {
+ "query": {
+ "range": {
+ "age": {
+ "gt": 18
+ }
+ }
+ }
+ }
+ ```
+- curl
+
+ ```shell
+ curl -XPOST "http://localhost:9200/user_info/_delete_by_query" -H 'Content-Type: application/json' -d'{"query":{"range":{"age":{"gt":18}}}}'
+ ```