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}}