Elasticsearch 语法总结
一、Elasticsearch 简介与启动
在 Elasticsearch 中,包含多个索引(Index),相应的每个索引可以包含多个类型(Type),这些不同的类型每个都可以存储多个文档(Document),每个文档又有多个属性。一个索引索引 (index) 类似于传统关系数据库 (如 mysql) 中的一个数据库,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或 indexes。类型 (Type) 相当于传统关系型数据库的表,而每一个文档就相当于传统关系型数据库的表中的一行数据。
下载好 es 后,在 bin
目录下双击运行 elasticsearch.bat
,访问 http://localhost:9200
,如下结果表示 es 启动成功。
开启 es 后占用了 9200 和 9300 两个端口,其中 9200 是 es 对外提供 restful 接口的端口,9300 是内部端口。
二、Elasticsearch 基础语法
1、添加数据
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
返回以下信息,表示创建成功。
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
其中,_index 为索引名称,_type 为类型名称,_version 为该文档的版本号,初始为 1,每次修改该文档时 _version 增加 1,_seq_no 为索引的版本号,每次修改了索引下的文档,被修改的文档的 _seq_no 和索引当前的 _seq_no 都被更新为修改前索引 _seq_no + 1。
注意: 当请求方法为 POST,且修改前后数据完全一样时,文档的 _version 和 _seq_no 都不改变。这种请求方式的写法为:
POST /${index}/${type}/${_id}/_update
,
请求体格式为:
{
"doc":{
"first_name": "Bob"
}
}
_id 为添加数据时自己设置的,如上 PUT /megacorp/employee/1
中的 1 就是自己设置的字段 _id,也可以在添加字段的时候不设置 _id 值,这时系统会默认返回一个字符串类型的 _id 值。
注意: 此时请求方式不能为 PUT
,应当为 POST
,否则会返回 405 报错。
2、查询数据
查询索引为 megacorp
下的全部文档。
GET /megacorp/_search
查询索引为 megacorp
下的类型名为 employee
的全部文档。
GET /megacorp/employee/_search
根据 _id 来准确查询文档。
GET /megacorp/employee/1
为查询方法加上参数,参数的 key 和 value 之间用 : 分隔。
GET /megacorp/employee/_search?q=last_name:Smith
将查询参数放在请求体中。
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
3、更新数据
更新数据和插入数据又可以用 PUT 和 POST 两种请求方式,且两种请求方式都可以用一下格式来更新数据:
- PUT/POST
/megacorp/employee/_id
请求方法体同插入数据, 逻辑上等同于将用数据将原数据覆盖掉。如:
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
POST 还可以通过 POST /megacorp/employee/_id/_update
格式来修改数据,此时请求体格式应当为:
{
"doc":{
"first_name": "Taoqiang"
}
}
将要修改的字段和新的值放在 doc 中,多个字段用逗号分隔。
4、删除数据
- 删除整个索引的数据
DELETE /megacorp
- 删除指定 _id 的数据
DELETE /megacorp/employee/_id
正确删除后返回以下类型数据:
{
"_index": "megacorp",
"_type": "employee",
"_id": "5",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 11,
"_primary_term": 1
}