ES数据管理

基本操作:

1) 创建索引

格式: PUT /索引名称

举例: PUT /es_db

2) 查询索引

格式: GET /索引名称

举例: GET /es_db

3) 删除索引

格式: DELETE /索引名称

举例: DELETE /es_db

4) 添加文档

格式: PUT /索引名称/类型/id
举例:
PUT /es_db/_doc/1
{
"name": "张三",
"sex": 1,
"age": 25,
"address": "广州天河公园",
"remark": "java developer"
}

PUT /es_db/_doc/2
{
"name": "李四",
"sex": 1,
"age": 28,
"address": "广州荔湾大厦",
"remark": "java assistant"
}

PUT /es_db/_doc/3
{
"name": "rod",
"sex": 0,
"age": 26,
"address": "广州白云山公园",
"remark": "php developer"
}

PUT /es_db/_doc/4
{
"name": "admin",
"sex": 0,
"age": 22,
"address": "长沙橘子洲头",
"remark": "python assistant"
}

PUT /es_db/_doc/5
{
"name": "小明",
"sex": 0,
"age": 19,
"address": "长沙岳麓山",
"remark": "java architect assistant"
}

5) 修改文档

格式: PUT /索引名称/类型/id
举例:
PUT /es_db/_doc/1
{
"name": "白起老师",
"sex": 1,
"age": 25,
"address": "张家界森林公园",
"remark": "php developer assistant"
}
注意:POST和PUT都能起到创建/更新的作用
1、需要注意的是:PUT->需要对一个具体的资源进行操作也就是要确定id才能进行更新/创建;而POST->是可以针对整个资源集合进行操作的,如果不写id就由ES生成一个唯一id进行创建新文档,如果填了id那就针对这个id的文档进行创建/更新
2、PUT只会将json数据都进行替换, POST只会更新相同字段的值
3、PUT与DELETE都是幂等性操作, 即不论操作多少次, 结果都一样

6) 查询文档

格式: GET /索引名称/类型/id

举例: GET /es_db/_doc/1

7) 删除文档

格式: DELETE /索引名称/类型/id

举例: DELETE /es_db/_doc/1

查询操作

1)查询当前类型中的所有文档 _search

格式: GET /索引名称/类型/_search
举例: GET
/es_db/_doc/_search
类似:SQL: select
* from student

2)条件查询, 如要查询age等于28岁的 _search?q=*:***

格式: GET /索引名称/类型/_search?q=*:***
举例: GET /es_db/_doc/_search?q=age:28
类似:SQL: select * from student where age = 28

3)范围查询, 如要查询age在25至26岁之间的 _search?q=***[** TO **] 注 意: TO 必须为大写

格式: GET /索引名称/类型/_search?q=***[25 TO 26]

举例: GET /es_db/_doc/_search?q=age[25 TO 26]

类似:SQL: select * from student where age between 25 and 26

4)根据多个ID进行批量查询 _mget

格式: GET /索引名称/类型/_mget

举例: GET /es_db/_doc/_mget
{
"ids":["1","2"]
}

类似:SQL: select * from student where id in (1,2)

GET /es_db/_doc/_mget
{
"ids":["1","2"]
}
此处只能使用ids或docs

5)查询年龄小于等于28岁的 :<=

格式: GET /索引名称/类型/_search?q=age:<=**

举例: GET /es_db/_doc/_search?q=age:<=28

类似:SQL: select * from student where age <= 28

6)查询年龄大于28前的 :>

格式: GET /索引名称/类型/_search?q=age:>**

举例: GET /es_db/_doc/_search?q=age:>28

类似:SQL: select * from student where age > 28

7) 分页查询 from=*&size=*

格式: GET /索引名称/类型/_search?q=age[25 TO 26]&from=0&size=1

举例: GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1

类似:SQL: select * from student where age between 25 and 26 limit 0, 1

8) 对查询结果只输出某些字段 _source=字段,字段

格式: GET /索引名称/类型/_search?_source=字段,字段
举例: GET
/es_db/_doc/_search?_source=name,age
类似:SQL: select name,age from student

9) 对查询结果排序 sort=字段:desc/asc

格式: GET /索引名称/类型/_search?sort=字段 desc
举例: GET
/es_db/_doc/_search?sort=age:desc
类似:SQL: select
* from student order by age desc

 文档批量操作

1、批量获取文档数据 批量获取文档数据是通过_mget的API来实现的)
 第一种:
在URL中不指定index和type
请求方式:GET
请求地址:_mget
功能说明 : 可以通过ID批量获取不同index和type的数据
请求参数:
docs : 文档数组参数
_index : 指定index
_type : 指定type
_id : 指定id
_source : 指定要查询的字段
GET _mget
{
"docs": [
{
"_index": "es_db",
"_type": "_doc",
"_id": 1
},
{
"_index": "es_db",
"_type": "_doc",
"_id": 2
}
]
}

响应结果如下:

{
  "docs" : [
    {
      "_index" : "es_db",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 3,
      "_seq_no" : 7,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "张三666",
        "sex" : 1,
        "age" : 25,
        "address" : "广州天河公园",
        "remark" : "java developer"
      }
    },
    {
      "_index" : "es_db",
      "_type" : "_doc",
      "_id" : "2",
      "_version" : 1,
      "_seq_no" : 1,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "李四",
        "sex" : 1,
        "age" : 28,
        "address" : "广州荔湾大厦",
        "remark" : "java assistant"
      }
    }
  ]
}

不赞成在批量查询中指定类型

第二种:

在URL中指定index
请求方式:GET
请求地址:/{{indexName}}/_mget
功能说明 : 可以通过ID批量获取不同index和type的数据
请求参数:
docs : 文档数组参数
_index : 指定index
_type : 指定type
_id : 指定id
_source : 指定要查询的字段
GET /es_db/_mget
{
"docs": [
{
"_type":"_doc",
"_id": 3
},
{
"_type":"_doc",
"_id": 4
}
]
}

第三种:

在URL中指定index和type
请求方式:GET
请求地址:/{{indexName}}/{{typeName}}/_mget
功能说明 : 可以通过ID批量获取不同index和type的数据
请求参数:
docs : 文档数组参数
_index : 指定index
_type : 指定type
_id : 指定id
_source : 指定要查询的字段
GET /es_db/_doc/_mget
{
"docs": [
{
"_id": 1
},
{
"_id": 2
}
]
}
批量操作文档数据
批量对文档进行写操作是通过_bulk的API来实现的
请求方式:POST
请求地址:_bulk
请求参数:通过_bulk操作文档,一般至少有两行参数(或偶数行参数)
第一行参数为指定操作的类型及操作的对象(index,type和id)
第二行参数才是操作的数据
参数类似于:
{"actionName":{"_index":"indexName", "_type":"typeName","_id":"id"}}
{"field1":"value1", "field2":"value2"}
actionName:表示操作类型,主要有create,index,delete和update
批量创建文档create
POST _bulk
{"create":{"_index":"article", "_type":"_doc", "_id":3}}
{"id":3,"title":"白起老师1","content":"白起老师666","tags":["java", "面向对象"],"create_time":1554015482530}
{"create":{"_index":"article", "_type":"_doc", "_id":4}}
{"id":4,"title":"白起老师2","content":"白起老师NB","tags":["java", "面向对象"],"create_time":1554015482530}
普通创建或全量替换index
POST _bulk
{"index":{"_index":"article", "_type":"_doc", "_id":3}}
{"id":3,"title":"图灵徐庶老师(一)","content":"图灵学院徐庶老师666","tags":["java", "面向对象"],"create_time":1554015482530}
{"index":{"_index":"article", "_type":"_doc", "_id":4}}
{"id":4,"title":"图灵诸葛老师(二)","content":"图灵学院诸葛老师NB","tags":["java", "面向对象"],"create_time":1554015482530}
如果原文档不存在,则是创建
如果原文档存在,则是替换(全量修改原文档)
批量删除delete
POST _bulk
{"delete":{"_index":"article", "_type":"_doc", "_id":3}}
{"delete":{"_index":"article", "_type":"_doc", "_id":4}}
批量修改update
POST _bulk
{"update":{"_index":"article", "_type":"_doc", "_id":3}}
{"doc":{"title":"ES大法必修内功"}}
{"update":{"_index":"article", "_type":"_doc", "_id":4}}
{"doc":{"create_time":1554018421008}}

 

posted @ 2022-03-30 22:22  VNone  阅读(129)  评论(0)    收藏  举报