基本概念 node
1. Node 与 Cluster 数据库
Elastic 本质上是一个分布式数据库,容许多台服务器协同工做,每台服务器能够运行多个 Elastic 实例。服务器
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。curl
2. Index 分布式
Elastic 会索引全部字段,通过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。url
因此,Elastic 数据管理的顶层单位就叫作 Index(索引)。它是单个数据库的同义词。每一个 Index (即数据库)的名字必须是小写。spa
下面的命令能够查看当前节点的全部 Index。对象
$ curl -X GET 'http://localhost:9200/_cat/indices?v'索引
3. Document 开发
Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
Document 使用 JSON 格式表示,下面是一个例子。
{
"user": "张三",
"title": "工程师",
"desc": "数据库管理"
}
同一个 Index 里面的 Document,不要求有相同的结构(scheme),可是最好保持相同,这样有利于提升搜索效率。
Index操做
新建 Index,能够直接向 Elastic 服务器发出 PUT 请求。下面的例子是新建一个名叫weather的 Index。
$ curl -X PUT 'localhost:9200/weather'
服务器返回一个 JSON 对象,里面的acknowledged字段表示操做成功。
{
"acknowledged":true,
"shards_acknowledged":true
}
而后,咱们发出 DELETE 请求,删除这个 Index。
$ curl -X DELETE 'localhost:9200/weather'
数据操做
1. 新增记录
向指定的 /Index/Type 发送 PUT 请求,就能够在 Index 里面新增一条记录。好比,向/accounts/person发送请求,就能够新增一条人员记录。
PUT /accounts/_doc/1
{
"user": "张三",
"title": "工程师",
"desc": "数据库管理"
}
服务器返回的 JSON 对象,会给出 Index、Id、Version 等信息。
{
"_index": "accounts",
"_type": "_doc",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 1
}
若是你仔细看,会发现请求路径是/accounts/person/1,最后的1是该条记录的 Id。它不必定是数字,任意字符串(好比abc)均可以。
注意,若是没有先建立 Index(这个例子是accounts),直接执行上面的命令,Elastic 也不会报错,而是直接生成指定的 Index。因此,打字的时候要当心,不要写错 Index 的名称。
2. 查看记录
向/Index/Type/Id发出 GET 请求,就能够查看这条记录。
GET /accounts/_doc/1
上面代码请求查看/accounts/1这条记录,URL 的参数pretty=true表示以易读的格式返回。
返回的数据中,found字段表示查询成功,_source字段返回原始记录。
{
"_index": "accounts",
"_type": "_doc",
"_id": "1",
"_version": 5,
"_seq_no": 4,
"_primary_term": 1,
"found": true,
"_source": {
"user": "张三",
"title": "工程师",
"desc": "数据库管理"
}
}
若是 Id 不正确,就查不到数据,found字段就是false。
$ curl 'localhost: 9200/weather/beijing/abc?pretty=true'
{
"_index": "accounts",
"_type": "_doc",
"_id": "100",
"found": false
}
也能只查询内容:
GET /accounts/_source/1
{
"user": "张三",
"title": "工程师",
"desc": "数据库管理,软件开发"
}
3. 删除记录
删除记录就是发出 DELETE 请求。
DELETE /accounts/_doc/2
这里先不要删除这条记录,后面还要用到。
4. 更新记录
更新记录就是使用 PUT 请求,从新发送一次数据。
PUT /accounts/_doc/1
{
"user": "张三",
"title": "工程师",
"desc": "数据库管理,软件开发"
}
{
"_index": "accounts",
"_type": "_doc",
"_id": "1",
"_version": 6,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 6,
"_primary_term": 1
}
上面代码中,咱们将原始数据从"数据库管理"改为"数据库管理,软件开发"。 返回结果里面,有几个字段发生了变化。
"_version" : 6,
"result" : "updated",
能够看到,记录的 Id 没变,可是版本(version)从1变成2,操做类型(result)从created变成updated。