Elasticsearch 之入门
Elasticsearch入门级介绍
- 术语介绍
- Document
- Index
- 如何创建索引和写入数据
- Rest API
- Index API
- Document API
术语介绍
- 文档 Document:用户存储在es 中的数据文档,es中存储的最小单元,类似于MySQL表中的一行数据
- 索引 Index:由具有相同字段的文档列表组成,表示一个文档的集合,类似于table,在6.0后一个Index下只有一个type。(在6后的版本会把type去除)
- 节点 Node:一个Elasticsearch的运行实例,是集群的构成单元
- 集群 Cluster:由一个或多个节点组成,对外提供服务
Document
Json Object,由字段(Field)组成,常见数据类型如下:
- 字符串:text, keyword
- 数值型:long, integer, short, byte, double, float, half_float, scaled_float
- 布尔:boolean
- 日期:date
- 二进制:binary
- 范围类型:integer_range, float_range, long_range, double_range, date_range
每一个文档都有唯一的id标识
- 自行指定
- es自动生成
Demo
93.180.71.3 --[17/May/2019:08:21:02 +0000] "GET/downloads/product_1 HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)"
以上日志记录到es 后:
{
"remote_ip":"93.180.71.3",
"user_name":"-",
"@timestamp":"2019-05-17T08:21:02.000Z",
"request_action":"GET",
"request":"/downloads/product_1",
"http_version":"1.1",
"response":"304",
"bytes":"0",
"referrer":"-",
"agent":"Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)"
}
MetaData(元数据),用于标注文档的相关信息
- _index:文档所在的索引名
- _type:文档所在的类型名
- _id:文档唯一id
- _uid:组合id,由 _type和 _id组成(6.x _type不再起作用,这里同_id一样)
- _source:文档的原始Json数据,可以从这里获取每个字段的内容
- _all:整合所有字段内容到该字段,默认禁用(很占磁盘空间)
Index
- 索引中存储具有相同结构的文档(Document);每个索引都有自己的mapping定义,用于定义字段名和类型
- 一个集群可以有多个索引,比如:nginx日志存储的时候可以按照日期每天生成一个索引来存储
– nginx-log-2019-01-01
– nginx-log-2019-01-02
– nginx-log-2019-01-03
如何创建索引和写入数据
Rest API
Elasticsearch 集群对外提供 RESTful API
- REST – REpresentational State Transfer
- URI 指定资源,如 Index、Document 等
- Http Method 指明资源操作类型,如 GET、POST、PUT、DELETE等
常用两种交互方式
Curl 命令行
curl -X PUT 'http://localhost:9200/employee/doc/1' -i -H "Content-Type: application/json" -d '{
"username": "bear"
"job": "php"
}'
- Kibana DevTools
Index API
用于创建、更新、删除索引配置等
创建索引如下:
PUT /user_index
查看现有索引
GET _cat/indices
删除索引如下:
DELETE /user_index
Document API
Elasticsearch 有专门的 Document API
创建文档
1、指定 id 创建文档(【创建文档时,如果索引不存在,es会自动创建对应的index(test_index)和type(doc)】PUT /test_index/doc/1
{
"username": "bear",
"job": "php"
}
2、不指定 id 创建文档POST /test_index/doc
{
"username": "tom",
"job": "java"
}
3、批量创建文档API — es允许一次创建多个文档,从而减少网络传输开销,提升写入速率;-endpoint为【_bulk】,bulk 每一行都是一个Json,第一行指定了操作的原始信息,如下:
其中:【index(创建文档当文档已存在会覆盖)、create(创建文档当文档已存在会报错)、delete、update】属于action_type(操作要做什么)POST _bulk
{
"index":{
"_index":"test_index","_type":"doc","_id":"2"}}
{
"username":"hebe","job":"web"}
{
"delete":{
"_index":"test_index","_type":"doc","_id":"1"}}
{
"update":{
"_index":"test_index","_type":"doc","_id":"2"}}
{
"doc":{
"job":"web-vue"}}
POST my_index/doc/_bulk
{
"index":{
"_id": "1"
}
}
{
"username": "alfred way",
"job": "java",
"age": 18,
"birth": "1990-02-02",
"isMarried": false
}
{
"index":{
"_id": "2"
}
}
{
"username": "alfred",
"job": "java and php specialist",
"age": 28,
"birth": "1990-02-02",
"isMarried": true
}
返回信息:
{
"took": 21,
"errors": false, //批量操作是否成功
"items": [ //每个bulk操作的返回结果
{
"index": {
"_index": "test_index",
"_type": "doc",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true,
"status": 201
}
},
{
"delete": {
"found": true,
"_index": "test_index",
"_type": "doc",
"_id": "1",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"status": 200
}
},
{
"update": {
"_index": "test_index",
"_type": "doc",
"_id": "2",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"status": 200
}
}
]
}
查询文档
1、指定要查询的文档idGET /test_index/doc/1
查询存在时:其中【_source存储了文档完整的原始数据】
查询未找到时:
2、搜索所有文档,用到【_search】,查询语句,Json格式,放在http_body中发送到es:GET /test_index/doc/_search
{
"query":{
"term":{
"_id":"1"
}
}
}
返回说明:{
"took": 3, //查询耗时,单位ms
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1, //符合条件的总文档数
"max_score": 1,
"hits": [ //返回的文档详情数据数组,默认前10个文档
{
"_index": "test_index", //索引名
"_type": "doc",
"_id": "1", //文档id
"_score": 1, //文档的得分
"_source": {
//文档详情
"username": "bear",
"job": "php"
}
}
]
}
}
3、批量查询文档API — es允许一次查询多个文档;-endpoint为【_mget】,可获取不同 index 的文档,如下:
GET /_mget
{
"docs":[
{
"_index":"test_index",
"_type":"doc",
"_id":"1"
},
{
"_index":"test_index",
"_type":"doc",
"_id":"2"
}
]
}
还没有评论,来说两句吧...