结合kibana一步一步学Elasticsearch 的增删改查
学习教程参考:https://www.cainiaojc.com/elasticsearch/elasticsearch-api-conventions.html
需要注意的是:
1.POST 用于新增,PUT用于更新最为合适;
2.PUT会将新的json值完全替换掉旧的,而POST方式只会更新相同字段的值,其他数据不会改变,新提交的字段若不存在则增加
3.PUT和DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样
- POST index/type/xxx 创建
- DELETE index/type/xxx 删除
- PUT index/type/xxx 更新或创建
- GET index/type/xxx 查看
其中:
POST不用加具体的id,它是作用在一个集合资源之上的(/uri),而PUT操作是作用在一个具体资源之上的(/uri/xxx),所以PUT操作必须要加ID
在ES中,如果不确定document的ID(documents具体含义见下),那么直接POST对应uri( “POST /website/blog” ),ES可以自己生成不会发生碰撞的UUID;
如果确定document的ID,比如 “PUT /website/blog/123”,那么执行创建或修改(修改时_version版本号提高1)
在幂等性的区别如下:
- PUT、GET、DELETE是幂等的,由于同一条这样的指令,执行多次结果都一样。比如 PUT /uri/xxx 多次,那么结果和这条指令执行一次效果一样。
- 而POST是非幂等的,执行多次更改多次服务器状态。比如POST /uri 多次,那么生成多个UUID的document,执行多次效果当然和执行一次不一样了。
1.创建索引,在关系数据库中的理解就是创建一个表:
PUT school
2.添加一条school的数据:POST或者是PUT都可以创建数据,其中_doc是type,1 是 _id
POST school/_doc/1
{
"name":"Crescent School",
"description":"State Board Affiliation",
"street":"Tonk Road",
"city":"Jaipur",
"state":"RJ",
"zip":"176114",
"location":[26.8535922,75.7923988],
"fees":2500,
"tags":["Well equipped labs"],
"rating":"4.5"
}
3.查询索引school的所有数据:
GET school/_search
{
"query": {
"match_all": {}
}
}
4.查询指定Id的数据,其中_doc是type:
GET school/_doc/2
5.根据指定的字段查询数据,GET或者POST都可以,其中school是索引,可以多个索引同时查询,以逗号隔开:
GET /school/_search
{
"query":{
"query_string": {
"default_field": "test",
"query": "test"
}
}
}
6.使用通配符模糊匹配索引查询,因为有些索引的前缀相同,只有后缀不同,因此可以前缀匹配查询:
也可以不知道具体的字段,直接通过关键字匹配数据
POST /school*/_search
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
- 查询所有以“ school”开头的索引,但不是来自school_gov并包含CBSE的索引
POST /school*,-schools_gov /_search
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
- ignore_unavailable−如果index(es)URL中不存在一个或多个,则不会发生错误或将停止任何操作 例如,school索引存在,但book_shops不存在。
POST /school*,book_shops/_search
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
以上查询则会报错索引book_shops不存在,从而无法显示索引school的查询数据,那么加上ignore_unavailable:
ignore_unavailable=true中的=前后不能有空格,错误写法:ignore_unavailable = true
POST /school*,book_shops/_search?ignore_unavailable=true
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
9.删除文档,其中_doc是type,1 是 _id:
DELETE school/_doc/1
10.按指定字段,做一些聚合操作,具体需要根据实际情况去选择:
但同样也会列出明细数据
POST user/_search
{
"aggs":{
"distinct_name_count":{"cardinality":{"field":"age"}},
"avg_age":{"avg":{"field":"age"}},
"max_age" : { "max" : { "field" : "age" } },
"min_age" : { "min" : { "field" : "age" } },
"total_age" : { "sum" : { "field" : "age" } },
"age_stats" : { "extended_stats" : { "field" : "age" } },
"grades_stats" : { "stats" : { "field" : "age" } }
}
}
11.Sql查询,可以返回对象,可以返回字符集
返回文本,注意:字段类型是数组的不能返回
POST /_sql?format=txt
{
"query": """
SELECT name,description,street,city,state,zip,rating FROM "school"
"""
}
返回对象
POST /_sql
{
"query": """
SELECT name,description,street,city,state,zip,rating FROM "school"
"""
}