ElasticSearch快速上手
一、基本概念
在ElasticSearch中,index
(索引)代表一个相似特征document
(文档)的集合,在一个index
中我们可以定义多个type
(类型),每个document
都为JSON格式的数据。
【需要注意的是在7.x版本之后的Type已经被移除,因为type会导致ES性能下降】。
我们也可以用关系数据库中的概念做一点简单的类比:
ES | 关系数据库 |
---|---|
Index | Database |
Type | Table |
document | 记录 |
属性 | 字段 |
二、简单检索
由于ElasticSearch已经将所有的功能封装为RESTful
风格的接口,我们只需要对接口发送对应的请求即可,接下来的示例我们使用之前已经安装完毕的kibana
进行操作。
在任意浏览器登录Kibana
选择Console
进行操作
1. _cat
_cat
命令用于查看ES的信息(如工作状态)
-
查看所有节点
指令:GET /_cat/nodes
-
查看ES健康状况
指令:GET /_cat/health
-
查看所有主节点
指令:GET /_cat/master
-
查看所有索引
指令:GET /_cat/indices
2. 添加一个文档
使用PUT|POST
保存一条数据
指令:PUT|POST 索引/类型/id
请求体中携带数据
- 示例:在customer索引下的external中保存一条id为1的数据
PUT /customer/external/1
{
"name":"joe"
}
注意:
这里使用POST
或者 PUT
均可
POST
: 可以新增,可以修改,如果不指定id
,会自动生成id。如果指定id
则会修改这个数据,并将_version
自增1。
PUT
:可以新增,可以修改,必须指定id
。
3.查询文档
使用GET
查询索引中的指定id
的数据
指令:GET /索引/类型/id
- 示例:查询customer索引下external类型id为1的文档
GET /customer/external/1
4.更新文档
使用POST|PUT
更新索引中指定id下的数据
指令:
POST /索引/类型/1
PUT /索引/类型/1
- 可以附加
_update
指令:
携带_update
指令,会进行数据对比,如果数据一致,则不进行任何操作,需要注意,使用_update
需要使用doc
包裹需要更新的内容
{
"doc":{
#更新信息
}
}
- 示例:
附加_update
指令更新customer索引下external类型id为1的文档
POST /customer/external/1/_update
{"doc":{"name":"joe"}}
使用_update
还可以在更新文档时为文档添加新的属性
- 示例:
为customer索引下的external类型id为1的文档增加一个age属性【增加属性不能使用PUT
】
POST /customer/external/1/_update
{"doc":{"name":"bin","age":18}}
5. 删除文档、索引
指令:
删除一个文档:DELETE /索引/类型/id
删除一个索引:DELETE /索引
- 示例:
删除 customer 索引下 external 类型 id 为 1 的文档
DELETE /customer/external/1
6.批量操作
可以批量增删改查数据
指令:
POST /_bluk # 批量操作
{action:{metadata}} # 操作类型
{request body} # 操作数据
实例:
向ES中批量插入数据
数据源
POST /bank/account/_bulk
{"index":{"_id":"1"}}
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
{"index":{"_id":"6"}}
# .... 后续内容省略