1.ES数据管理

1.1 ES数据管理概述

ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。
然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。
在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
ES使用JSON作为文档序列化格式。
JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
ES存储的一个员工文档的格式示例:

  1. {
  2. "email": "584614151@qq.com",
  3. "name": "张三",
  4. "age": 30,
  5. "interests": [ "篮球", "健身" ]
  6. }

1.2 基本操作

1) 创建索引
格式: PUT /索引名称
举例: PUT /es_db
2) 查询索引
格式: GET /索引名称
举例: GET /es_db
3) 删除索引
格式: DELETE /索引名称
举例: DELETE /es_db
4) 添加文档
格式: PUT /索引名称/类型/id

  1. 举例:
  2. PUT /es_db/_doc/1
  3. {
  4. "name": "张三",
  5. "sex": 1,
  6. "age": 25,
  7. "address": "广州天河公园",
  8. "remark": "java developer"
  9. }
  10. PUT /es_db/_doc/2
  11. {
  12. "name": "李四",
  13. "sex": 1,
  14. "age": 28,
  15. "address": "广州荔湾大厦",
  16. "remark": "java assistant"
  17. }
  18. PUT /es_db/_doc/3
  19. {
  20. "name": "rod",
  21. "sex": 0,
  22. "age": 26,
  23. "address": "广州白云山公园",
  24. "remark": "php developer"
  25. }
  26. PUT /es_db/_doc/4
  27. {
  28. "name": "admin",
  29. "sex": 0,
  30. "age": 22,
  31. "address": "长沙橘子洲头",
  32. "remark": "python assistant"
  33. }
  34. PUT /es_db/_doc/5
  35. {
  36. "name": "小明",
  37. "sex": 0,
  38. "age": 19,
  39. "address": "长沙岳麓山",
  40. "remark": "java architect assistant"
  41. }

5) 修改文档

  1. 格式: PUT /索引名称/类型/id
  2. 举例:
  3. PUT /es_db/_doc/1
  4. {
  5. "name": "白起老师",
  6. "sex": 1,
  7. "age": 25,
  8. "address": "张家界森林公园",
  9. "remark": "php developer assistant"
  10. }

注意: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

2.Restful认识

Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作。 基于Restful API ES和所有客户端的交互都是使用JSON格式的数据.
其他所有程序语言都可以使用RESTful API,通过9200端口的与ES进行通信
GET查询
PUT添加
POST修改
DELE删除
用户做crud

  1. Get http://localhost:8080/employee/1
  2. Get http://localhost:8080/employees
  3. put http://localhost:8080/employee
  4. {
  5. }
  6. delete http://localhost:8080/employee/1
  7. Post http://localhost:8080/employee/1
  8. {
  9. }

使用Restful的好处:
透明性,暴露资源存在。
充分利用 HTTP 协议本身语义,不同请求方式进行不同的操作

3.查询操作

3.1 查询当前类型中的所有文档 _search
格式: GET /索引名称/类型/_search
举例: GET /es_db/_doc/_search
SQL: select * from student

3.2 条件查询, 如要查询age等于28岁的 _search?q=:**
格式: GET /索引名称/类型/_search?q=:**
举例: GET /es_db/_doc/_search?q=age:28
SQL: select from student where age = 28

3.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

3.4 根据多个ID进行批量查询 _mget
格式: GET /索引名称/类型/_mget
举例:GET /es_db/_doc/_mget { “ids”:[“1”,”2”] }
SQL: select * from student where id in (1,2)

3.5 查询年龄小于等于28岁的 :<=
格式: GET /索引名称/类型/_search?q=age:<=

举例: GET /es_db/_doc/_search?q=age:<=28
SQL: select * from student where age <= 28

3.6 查询年龄大于28前的 :>
格式: GET /索引名称/类型/_search?q=age:>*
举例: GET /es_db/_doc/_search?q=age:>28
SQL: select
from student where age > 28

3.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

3.8 对查询结果只输出某些字段 _source=字段,字段
格式: GET /索引名称/类型/_search?_source=字段,字段
举例: GET /es_db/_doc/_search?_source=name,age
SQL: select name,age from student

3.9 对查询结果排序 sort=字段:desc/asc
格式: GET /索引名称/类型/_search?sort=字段 desc
举例: GET /es_db/_doc/_search?sort=age:desc
SQL: select * from student order by age desc