API 基本格式
在命令行访问 集群的 API 的格式如下:
$curl -X<VERB>
'<protocol>://<host:port>/<path>/<operation_name>?<query_string>' -d '<body>'
简单解释一下命令的各个部分:
- ERB : 请求的方法,包括 GET/POST/PUT/DELETE/HEAD
- portocol : 协议类型, http 或者 https
- host:port : Elasticsearch 节点所在的主机名或 IP 和端口,比如:本地的 '127.0.0.1:9200'
- path : 表示索引名、类型、文档 ID 组成的路径,比如: /logstash-2017.08.09/log/1
- operation_name : 要执行的操作的名称,比如: _search, _count 等
- query_string : 这是一个在查询参数中指定的可选参数。比如: pretty 用于输出 JSON 格式的数据
- body : 用于查询的请求体,正文文本,在这里可以写上具体的匹配条件等
示例:
curl -XGET 'http://localhost:9200/logstash-2017.09.09'/_search?pretty
表示通过 GET 方法,http 的协议向本地 es 的节点发送查询请求,请求的索引是 logstash-2017.09.09
并且查询结果以 JSON 格式输出
列出集群中所有可用的索引
curl -XGET 'http://localhost:9200/_cat/indices?v'
列出集群中所有节点
curl -XGET 'http://localhost:9200/_cat/nodes?v'
创建索引
要求 : PUT /index
创建索引时,可以指定以下内容:
- 索引设置
- 索引中字段的映射
- 索引别名
路径参数
索引名称必须满足以下条件:
- 仅小写
- 不能包括\,/,*,?,",<,>,|,``(空格字符), ,,#
- 7.0之前的索引可能包含冒号(:),但已弃用,并且在7.0+中不支持
- 无法下手-,_,+
- 不能为.或..
- 不能超过255个字节(请注意它是字节,因此多字节字符将更快地计入255个限制)
请求正文
aliases
索引的索引别名
mappings
映射索引中的字段
settings
配置选项
一个创建索引的范例
PUT /index001
{
"settings":{
"number_of_shards": 3, # 设置节点数 7.x之后 默认为1个
"number_of_replicas": 1 # 设置节点副本数
},
"mappings":{
"properties":{ # 属性
"name":{ "type":"text"}, # 字段
"country":{"type":"keyword"},
"age":{"type":"integer"},
"date":{"type":"date","format":"yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"}
}
}
}
向索引中插入数据
指定文档 ID 使用 PUT 方法
自动创建文档 ID 使用 POST 方法
PUT /index001/_doc/1
# 当两次插入同一个id文档的话,第一次是添加,之后都会是更新状态
{
"name":"my_name",
"country":"北京",
"age":20,
"date":"xxxx-xx-xx"
}
从索引中删除数据
DELETE /index001_doc/1
直接会删除数据
从索引中修改数据
PUT /index001/_doc/1/_update
从索引中查看数据
GET /index001/_doc/1
给索引起别名
PUT /index001/_alias/index1
详情查看官网
删除索引
DELETE /index001
删除索引别名
DELETE /index001/_alias/index1
空搜索
搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档
GET 10.0.122.188:9200/_search?pretty
返回的部分数据:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 301000,
"max_score": 1,
"hits": [
{
"_index": "logstash-2017.11.04",
"_type": "log",
"_id": "AV-JY_UJfYCoiZimXUZz",
"_score": 1,
"_source": {
"request": "http://123.207.95.27:61180/upload/trans/ff/09/650827/html5/data/img19.png",
"region_code": "11",
"longitude": 116.3883
},
"offset": 352852504,
"auth": "-",
"ident": "-",
"input_type": "log",
"verb": "GET",
"source": "/var/log/nginx/www_eeo_cn.access.log-20170718",
"message": "12"
"type": "log",
"tags": [
"beats_input_codec_plain_applied"
],
"referrer": "\"http://123.207.95.27:61180/upload/trans/ff/09/650827/html5/index.html\"",
"@timestamp": "2017-11-04T23:35:47.664Z",
"response": "304",
"bytes": "0",
"clientip": "123.207.95.27",
"@version": "1",
"beat": {
"name": "ansible",
"hostname": "ansible",
"version": "5.6.3"
},
"host": "ansible",
"httpversion": "1.1",
"timestamp": "18/Jul/2017:18:57:53 +0800"
}
},
]
}
}
关键字段说明
hits
返回结果中最重要的部分是 hits ,它 包含 total 字段来表示匹配到的文档总数,并且一个 hits 数组包含所查询结果的前十个文档。
在 hits 数组中每个结果包含文档的 _index 、 _type 、 _id ,加上 _source 字段。这意味着我们可以直接从返回的搜索结果中使用整个文档。这不像其他的搜索引擎,仅仅返回文档的ID,需要你单独去获取文档。
每个结果还有一个 _score ,它衡量了文档与查询的匹配程度。默认情况下,首先返回最相关的文档结果,就是说,返回的文档是按照 _score 降序排列的。在这个例子中,我们没有指定任何查询,故所有的文档具有相同的相关性,因此对所有的结果而言 1 是中性的 _score 。
max_score 值是与查询所匹配文档的 _score 的最大值
took
took 值告诉我们执行整个搜索请求耗费了多少毫秒。
shards编辑
_shards 部分 告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。正常情况下我们不希望分片失败,但是分片失败是可能发生的。如果我们遭遇到一种灾难级别的故障,在这个故障中丢失了相同分片的原始数据和副本,那么对这个分片将没有可用副本来对搜索请求作出响应。假若这样,Elasticsearch 将报告这个分片是失败的,但是会继续返回剩余分片的结果
timeout编辑
imed_out 值告诉我们查询是否超时。默认情况下,搜索请求不会超时。 如果低响应时间比完成结果更重要,你可以指定 timeout 为 10 或者 10ms(10毫秒),或者 1s(1秒)
GET /_search?timeout=10ms
==应当注意的是 timeout 不是停止执行查询,它仅仅是告知正在协调的节点返回到目前为止收集的结果并且关闭连接。在后台,其他的分片可能仍在执行查询即使是结果已经被发送了。==
同时对多个索引和多个类型进行搜索
/_search
在所有的索引中搜索所有的类型
/gb/_search
在 gb 索引中搜索所有的类型
/gb,us/_search
在 gb 和 us 索引中搜索所有的文档
/g*,u*/_search
在任何以 g 或者 u 开头的索引中搜索所有的类型
/gb/user/_search
在 gb 索引中搜索 user 类型
/gb,us/user,tweet/_search
在 gb 和 us 索引中搜索 user 和 tweet 类型
/_all/user,tweet/_search
在所有的索引中搜索 user 和 tweet 类型
当在单一的索引下进行搜索的时候,Elasticsearch 转发请求到索引的每个分片中,可以是主分片也可以是副本分片,然后从每个分片中收集结果。多索引搜索恰好也是用相同的方式工作的--只是会涉及到更多的分片。
下面是通过postman具体操作api实现增删改查
-
增加索引 使用
put
方法
索引名必须是小写字母image
代码
{
"settings":{
"number_of_shards": 3, # 索引的分片数
"number_of_replicas": 1 # 索引的备份数
},
"mappings":{ # 指定此索引为结构化的索引
"properties":{
"name":{ "type":"text"},
"country":{"type":"keyword"},
"age":{"type":"integer"},
"date":{"type":"date","format":"yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"}
##这里的日期是可以有三种格式的 匹配到这三种都会存到ela中
}
}
}
-
增加数据
image
代码
{
"name": "shark",
"country":"beijing",
"age":18,
"date": "2019-11-22",
}
-
查看数据
image
-
ELA小鸡群查看
image
-
再次增加数据
image
-
删除之前添加的数据,索引中的某一个数据
image
网友评论