1、创建索引

1.1、直接塞入对象,会自动创建索引

  1. PUT /vvvv/vurx/1
  2. {
  3. "name":"吴苏环",
  4. "age":27,
  5. "desc":"一顿操作猛如虎,一看工资2500"
  6. }

2、插入数据

  1. PUT /vvvv/vurx/1
  2. {
  3. "name":"吴苏环",
  4. "age":27,
  5. "desc":"一顿操作猛如虎,一看工资2500"
  6. }

3、修改数据

  1. //直接覆盖,不推荐!!!
  2. PUT /vvvv/vurx/1
  3. {
  4. "name":"吴苏环update",
  5. "age":27,
  6. "desc":"一顿操作猛如虎,一看工资2500"
  7. }
  1. //推荐使用!
  2. POST /vvvv/vurx/1/_update
  3. {
  4. "doc":{
  5. "name":"吴苏环学习ES"
  6. }
  7. }

4、删除数据

4.1、删除索引

DELETE /vvvv

4.2、删除doc(数据)

DELETE /vvvv/vurx/1

5、查询数据

5.1、结构查询

5.1.1、查询所有索引

  1. GET /_cat/indices
  2. green open .kibana_task_manager_1 NK7olWHFTkeLqncUdymgRw 1 0 2 2 20.9kb 20.9kb
  3. yellow open jd_goods YN_86pAsQF2vH4YYQYZZrw 1 1 60 0 68.8kb 68.8kb
  4. green open .apm-agent-configuration SPjU_VMGRhWrj7ZSPuX5qw 1 0 0 0 283b 283b
  5. yellow open vvvv VwGr9u0dTqa5Fe4WGyiFUQ 1 1 3 0 13kb 13kb
  6. yellow open testdb -dun8ufgRGqaQSOhu4N9zA 1 1 2 0 15.6kb 15.6kb
  7. yellow open kisia 53Kg-xxnTg697VnSd36lZQ 1 1 8 0 7.5kb 7.5kb
  8. green open .kibana_1 R3D6HLFMShm5uWlHilFS4Q 1 0 40 9 58.3kb 58.3kb
  9. yellow open idea-create IP4ygmRbThOlxCueAo4aEw 1 1 0 0 283b 283b

5.2、简单数据查询

5.2.1、根据id查询数据

GET /vvvv/vurx/1

5.2.2、根据name查询数据

GET /vvvv/vurx/_search?q=name:吴苏环

5.3、复杂操作数据查询

5.3.1、根据某个字段查询

等同于(where xxx=’’)

  1. GET /vvvv/vurx/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "环"
  6. }
  7. }
  8. }

5.3.2、结果只展示某些字段

(select a,b from xxx)

  1. GET /vvvv/vurx/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "环"
  6. }
  7. },
  8. "_source": [
  9. "name",
  10. "desc"
  11. ]
  12. }

5.3.3、根据某个字段排序

(select * from order by age asc)

  1. GET /vvvv/vurx/_search
  2. {
  3. "query": {
  4. "match": {
  5. "desc": "一顿"
  6. }
  7. },
  8. "sort": [
  9. {
  10. "age": {
  11. "order": "asc"
  12. }
  13. }
  14. ]
  15. }

5.3.4、分页

  1. GET /vvvv/vurx/_search
  2. {
  3. "query": {
  4. "match": {
  5. "desc": "一顿"
  6. }
  7. },
  8. "sort": [
  9. {
  10. "age": {
  11. "order": "asc"
  12. }
  13. }
  14. ],
  15. "from": 0, //从第几个数据开始
  16. "size": 1 //返回几条数据
  17. }

5.3.5、根据多个字段查询

(where xxx=’’ and yyy=’’)

  1. GET /vvvv/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "name": "吴苏环"
  9. }
  10. },
  11. {
  12. "match": {
  13. "age": "27"
  14. }
  15. }
  16. ]
  17. }
  18. }
  19. }

5.3.6、满足其中一个字段查询

(where a=’’ or a=’’)

  1. GET /vvvv/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "should": [
  6. {
  7. "match": {
  8. "name": "吴苏环"
  9. }
  10. },
  11. {
  12. "match": {
  13. "desc": "xxx"
  14. }
  15. }
  16. ]
  17. }
  18. }
  19. }

5.3.7、范围查询

(where a>’’ and a<’’)

  1. GET /vvvv/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "name": "吴苏环"
  9. }
  10. }
  11. ],
  12. "filter": {
  13. "range": {
  14. "age": {
  15. "gte": 10,
  16. "lte": 30
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }

gt:大于 gte:大于等于 lt:小于 lte:小于等于

5.4、聚合查询

5.4.1、简单聚合

5.4.1.1、通过type字段聚合查询

  1. GET /vvvv/_search
  2. {
  3. "aggs": {
  4. "aggByType": {
  5. "terms": {
  6. "field": "type.keyword",
  7. "size": 10
  8. }
  9. }
  10. },
  11. "size": 0
  12. }

5.4.1.2、结果展示

  1. {
  2. "took" : 1,
  3. "timed_out" : false,
  4. "_shards" : {
  5. "total" : 1,
  6. "successful" : 1,
  7. "skipped" : 0,
  8. "failed" : 0
  9. },
  10. "hits" : {
  11. "total" : {
  12. "value" : 4,
  13. "relation" : "eq"
  14. },
  15. "max_score" : null,
  16. "hits" : [ ]
  17. },
  18. "aggregations" : {
  19. "aggByType" : {
  20. "doc_count_error_upper_bound" : 0,
  21. "sum_other_doc_count" : 0,
  22. "buckets" : [
  23. {
  24. "key" : "android",
  25. "doc_count" : 2
  26. },
  27. {
  28. "key" : "PC",
  29. "doc_count" : 1
  30. },
  31. {
  32. "key" : "ios",
  33. "doc_count" : 1
  34. }
  35. ]
  36. }
  37. }
  38. }

5.4.2、复合聚合

5.4.2.1、先通过type聚合,再通过age聚合

  1. GET /vvvv/_search
  2. {
  3. "aggs": {
  4. "aggByType": {
  5. "terms": {
  6. "field": "type.keyword",
  7. "size": 10
  8. },
  9. "aggs": {
  10. "aggByAge": {
  11. "terms": {
  12. "field": "age",
  13. "size": 10
  14. }
  15. }
  16. }
  17. }
  18. },
  19. "size": 0
  20. }

5.3.2.2、结果展示

  1. {
  2. "took" : 1,
  3. "timed_out" : false,
  4. "_shards" : {
  5. "total" : 1,
  6. "successful" : 1,
  7. "skipped" : 0,
  8. "failed" : 0
  9. },
  10. "hits" : {
  11. "total" : {
  12. "value" : 4,
  13. "relation" : "eq"
  14. },
  15. "max_score" : null,
  16. "hits" : [ ]
  17. },
  18. "aggregations" : {
  19. "aggByType" : {
  20. "doc_count_error_upper_bound" : 0,
  21. "sum_other_doc_count" : 0,
  22. "buckets" : [
  23. {
  24. "key" : "android",
  25. "doc_count" : 2,
  26. "aggByAge" : {
  27. "doc_count_error_upper_bound" : 0,
  28. "sum_other_doc_count" : 0,
  29. "buckets" : [
  30. {
  31. "key" : 24,
  32. "doc_count" : 1
  33. },
  34. {
  35. "key" : 27,
  36. "doc_count" : 1
  37. }
  38. ]
  39. }
  40. },
  41. {
  42. "key" : "PC",
  43. "doc_count" : 1,
  44. "aggByAge" : {
  45. "doc_count_error_upper_bound" : 0,
  46. "sum_other_doc_count" : 0,
  47. "buckets" : [
  48. {
  49. "key" : 27,
  50. "doc_count" : 1
  51. }
  52. ]
  53. }
  54. },
  55. {
  56. "key" : "ios",
  57. "doc_count" : 1,
  58. "aggByAge" : {
  59. "doc_count_error_upper_bound" : 0,
  60. "sum_other_doc_count" : 0,
  61. "buckets" : [
  62. {
  63. "key" : 27,
  64. "doc_count" : 1
  65. }
  66. ]
  67. }
  68. }
  69. ]
  70. }
  71. }
  72. }

5.4.3、聚合关键字

5.5、游标查询

在默认情况下,ES查询每次返回的数量最多只有1W条,且只能是前1W条。要想检索更多的数据,只能采用游标查询。

5.5.1、使用步骤

5.5.1.1、步骤一

查询:在原来查询的基础加上 ?scroll=1m

  1. GET /vvvv/_search?scroll=1m
  2. {
  3. "query": {
  4. "match_all": {}
  5. },
  6. "size": 2
  7. }

5.5.1.2、步骤二

结果:

  1. {
  2. "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAkvRoWZjMxMC1uYXpRN3FkZTRLLUxRUWNMQQ==",
  3. "took" : 0,
  4. "timed_out" : false,
  5. "_shards" : {
  6. "total" : 1,
  7. "successful" : 1,
  8. "skipped" : 0,
  9. "failed" : 0
  10. },
  11. "hits" : {
  12. "total" : {
  13. "value" : 4,
  14. "relation" : "eq"
  15. },
  16. "max_score" : 1.0,
  17. "hits" : [
  18. {
  19. "_index" : "vvvv",
  20. "_type" : "vurx",
  21. "_id" : "1",
  22. "_score" : 1.0,
  23. "_source" : {
  24. "name" : "吴苏环",
  25. "age" : 27,
  26. "desc" : "一顿操作猛如虎,一看工资2500",
  27. "type" : "ios"
  28. }
  29. },
  30. {
  31. "_index" : "vvvv",
  32. "_type" : "vurx",
  33. "_id" : "2",
  34. "_score" : 1.0,
  35. "_source" : {
  36. "name" : "吴苏环",
  37. "age" : 27,
  38. "desc" : "一顿操作猛如虎,一看工资2500",
  39. "type" : "PC"
  40. }
  41. }
  42. ]
  43. }
  44. }

5.5.1.3、步骤三

其实索引里面一共命中了4个文档,但是由于size只返回2个。可以拿着【返回】回来的 scroll_id 查询剩下的数据。

  1. /* 只需要传入返回的游标id即可,查询条件会保持不变 */
  2. GET /_search/scroll?
  3. {
  4. "scroll":"1m",
  5. "scroll_id":"DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAkwOgWZjMxMC1uYXpRN3FkZTRLLUxRUWNMQQ=="
  6. }

5.5.1.4、步骤四

此时会查出剩下的结果

  1. {
  2. "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAkwSMWZjMxMC1uYXpRN3FkZTRLLUxRUWNMQQ==",
  3. "took" : 1,
  4. "timed_out" : false,
  5. "terminated_early" : false,
  6. "_shards" : {
  7. "total" : 1,
  8. "successful" : 1,
  9. "skipped" : 0,
  10. "failed" : 0
  11. },
  12. "hits" : {
  13. "total" : {
  14. "value" : 4,
  15. "relation" : "eq"
  16. },
  17. "max_score" : 1.0,
  18. "hits" : [
  19. {
  20. "_index" : "vvvv",
  21. "_type" : "vurx",
  22. "_id" : "4",
  23. "_score" : 1.0,
  24. "_source" : {
  25. "name" : "吴苏环",
  26. "age" : 27,
  27. "desc" : "一顿操作猛如虎,一看工资2500",
  28. "type" : "android"
  29. }
  30. },
  31. {
  32. "_index" : "vvvv",
  33. "_type" : "vurx",
  34. "_id" : "3",
  35. "_score" : 1.0,
  36. "_source" : {
  37. "name" : "吴苏环",
  38. "age" : "24",
  39. "desc" : "一顿操作猛如虎,一看工资2500",
  40. "type" : "android"
  41. }
  42. }
  43. ]
  44. }
  45. }

5.5.1.5、步骤五

重复步骤三四,一直到hits为空即可,如下方

  1. {
  2. "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAkwSMWZjMxMC1uYXpRN3FkZTRLLUxRUWNMQQ==",
  3. "took" : 1,
  4. "timed_out" : false,
  5. "terminated_early" : false,
  6. "_shards" : {
  7. "total" : 1,
  8. "successful" : 1,
  9. "skipped" : 0,
  10. "failed" : 0
  11. },
  12. "hits" : {
  13. "total" : {
  14. "value" : 4,
  15. "relation" : "eq"
  16. },
  17. "max_score" : 1.0,
  18. "hits" : [ ]
  19. }
  20. }

5.5.2、注意事项

5.5.2.1、二次游标查询超过游标存过时间

假设第一次查询

  1. GET /vvvv/_search?scroll=1m
  2. {
  3. ......
  4. }

结果由于该语句耗时过长,查询超过1m

  1. {
  2. "_scroll_id" : "xxxx==",
  3. "took" : 1200,
  4. ......
  5. }

再使用返回来的游标id进行二次查询

  1. GET /_search/scroll?
  2. {
  3. "scroll":"1m",
  4. "scroll_id":"xxxx=="
  5. }

返回如下结果 "status" : 404

  1. {
  2. "error" : {
  3. "root_cause" : [
  4. {
  5. "type" : "search_context_missing_exception",
  6. "reason" : "No search context found for id [2407706]"
  7. }
  8. ],
  9. "type" : "search_phase_execution_exception",
  10. "reason" : "all shards failed",
  11. "phase" : "query",
  12. "grouped" : true,
  13. "failed_shards" : [
  14. {
  15. "shard" : -1,
  16. "index" : null,
  17. "reason" : {
  18. "type" : "search_context_missing_exception",
  19. "reason" : "No search context found for id [2407706]"
  20. }
  21. }
  22. ],
  23. "caused_by" : {
  24. "type" : "search_context_missing_exception",
  25. "reason" : "No search context found for id [2407706]"
  26. }
  27. },
  28. "status" : 404
  29. }

5.5.2.2、游标返回是无序的!!!无序!!!