微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

ElasticSearch教程——Kibana简单操作ES

elasticsearch aide_941 26℃

ElasticSearch教程——Kibana简单操作ES

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gwd1154978352/article/details/82804942

ElasticSearch汇总请查看:ElasticSearch教程——汇总篇

运行、打开kibana相关工具

要先运行ElasticSearch

  1. /usr/elasticsearch/kibana/kibana-6.4.0-linux-x86_64/bin
  2. sh kibana

打开对应的dev Tools

 

获取所有数据

GET /_search

返回结果

  1. {
  2. “took”: 76,
  3. “timed_out”: false,
  4. “_shards”: {
  5. “total”: 16,
  6. “successful”: 16,
  7. “skipped”: 0,
  8. “failed”: 0
  9. },
  10. “hits”: {
  11. “total”: 8,
  12. “max_score”: 1,
  13. “hits”: [
  14. {
  15. “_index”: “.kibana”,
  16. “_type”: “doc”,
  17. “_id”: “config:6.4.0”,
  18. “_score”: 1,
  19. “_source”: {
  20. “type”: “config”,
  21. “updated_at”: “2018-09-18T09:30:18.949Z”,
  22. “config”: {
  23. “buildNum”: 17929,
  24. “telemetry:optIn”: true
  25. }
  26. }
  27. },
  28. {
  29. “_index”: “blog”,
  30. “_type”: “article”,
  31. “_id”: “eTmX5mUBtZGWutGW0TNs”,
  32. “_score”: 1,
  33. “_source”: {
  34. “title”: “New version of Elasticsearch released!”,
  35. “content”: “Version 1.0 released today!”,
  36. “priority”: 10,
  37. “tags”: [
  38. “announce”,
  39. “elasticsearch”,
  40. “release”
  41. ]
  42. }
  43. },
  44. {
  45. “_index”: “ecommerce”,
  46. “_type”: “product”,
  47. “_id”: “2”,
  48. “_score”: 1,
  49. “_source”: {
  50. “name”: “jiajieshi yagao”,
  51. “desc”: “youxiao fangzhu”,
  52. “price”: 25,
  53. “producer”: “jiajieshi producer”,
  54. “tags”: [
  55. “fangzhu”
  56. ]
  57. }
  58. },
  59. {
  60. “_index”: “ecommerce”,
  61. “_type”: “product”,
  62. “_id”: “J3fLFWYBBoLynJN1-kOG”,
  63. “_score”: 1,
  64. “_source”: {
  65. “name”: “test yagao”,
  66. “desc”: “youxiao fangzhu”
  67. }
  68. },
  69. {
  70. “_index”: “blog”,
  71. “_type”: “article”,
  72. “_id”: “1”,
  73. “_score”: 1,
  74. “_source”: {
  75. “id”: “1”,
  76. “title”: “New version of Elasticsearch released!”,
  77. “content”: “Version 1.0 released today!”,
  78. “priority”: 10,
  79. “tags”: [
  80. “announce”,
  81. “elasticsearch”,
  82. “release”
  83. ]
  84. }
  85. },
  86. {
  87. “_index”: “ecommerce”,
  88. “_type”: “product”,
  89. “_id”: “KXfSFWYBBoLynJN1TUPo”,
  90. “_score”: 1,
  91. “_source”: {
  92. “name”: “test yagao2”,
  93. “desc”: “youxiao fangzhu2”
  94. }
  95. },
  96. {
  97. “_index”: “index”,
  98. “_type”: “fulltext”,
  99. “_id”: “1”,
  100. “_score”: 1,
  101. “_source”: {
  102. “content”: “中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首”
  103. }
  104. },
  105. {
  106. “_index”: “ecommerce”,
  107. “_type”: “product”,
  108. “_id”: “3”,
  109. “_score”: 1,
  110. “_source”: {
  111. “name”: “zhonghua yagao”,
  112. “desc”: “caoben zhiwu”,
  113. “price”: 40,
  114. “producer”: “zhonghua producer”,
  115. “tags”: [
  116. “qingxin”
  117. ]
  118. }
  119. }
  120. ]
  121. }
  122. }

 

返回数据含义

 

  1. took:耗费了几毫秒
  2. timed_out:是否超时,false是没有,默认无timeout
  3. _shardsshards fail的条件(primaryreplica全部挂掉),不影响其他shard。默认情况下来说,一个搜索请求,会打到一个index的所有primary shard上去,当然了,每个primary shard都可能会有一个或多个replic shard,所以请求也可以到primary shard的其中一个replica shard上去。
  4. hits.total:本次搜索,返回了几条结果
  5. hits.max_scorescore的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
  6. hits.hits:包含了匹配搜索的document的详细数据,默认查询前10条数据,按_score降序排序

timeout这边默认是没有的,也就意味着当你搜索的时候他会直到所有搜索结束才会返回结果,但是当我们做一些时间比较敏感的搜索的时候,等待时间很久,对用户来说是非常不友好的。那我们可以通过设置timeout这个值,来定时返回已经搜索到的数据。timeout机制,指定每个shard,就只能在timeout时间范围内,将搜索到的部分数据(也可能是搜索到的全部数据),直接返回给client,而不是等到所有数据全部搜索出来后再返回。

可以通过如下方式进行设置

  1. timeout=10ms,timeout=1s,timeout=1m
  2. GET /_search?timeout=10m

 

 

创建Document

  1. PUT /ecommerce/product/1
  2. {
  3. “name” : “gaolujie yagao”,
  4. “desc” : “gaoxiao meibai”,
  5. “price” : 30,
  6. “producer” : “gaolujie producer”,
  7. “tags”: [ “meibai”, “fangzhu” ]
  8. }
  9. PUT /ecommerce/product/2
  10. {
  11. “name” : “jiajieshi yagao”,
  12. “desc” : “youxiao fangzhu”,
  13. “price” : 25,
  14. “producer” : “jiajieshi producer”,
  15. “tags”: [ “fangzhu” ]
  16. }
  17. PUT /ecommerce/product/3
  18. {
  19. “name” : “zhonghua yagao”,
  20. “desc” : “caoben zhiwu”,
  21. “price” : 40,
  22. “producer” : “zhonghua producer”,
  23. “tags”: [ “qingxin” ]
  24. }

检索文档(查询)

GET /ecommerce/product/1

返回结果

  1. {
  2. “_index”: “ecommerce”,
  3. “_type”: “product”,
  4. “_id”: “1”,
  5. “_version”: 1,
  6. “found”: true,
  7. “_source”: {
  8. “name”: “gaolujie yagao”,
  9. “desc”: “gaoxiao meibai”,
  10. “price”: 30,
  11. “producer”: “gaolujie producer”,
  12. “tags”: [
  13. “meibai”,
  14. “fangzhu”
  15. ]
  16. }
  17. }

替换文档(全量替换)

  1. PUT /ecommerce/product/1
  2. {
  3. “name” : “jiaqiangban gaolujie yagao”,
  4. “desc” : “gaoxiao meibai”,
  5. “price” : 30,
  6. “producer” : “gaolujie producer”,
  7. “tags”: [ “meibai”, “fangzhu” ]
  8. }

返回结果

  1. {
  2. “_index”: “ecommerce”,
  3. “_type”: “product”,
  4. “_id”: “1”,
  5. “_version”: 2,
  6. “result”: “updated”,
  7. “_shards”: {
  8. “total”: 2,
  9. “successful”: 1,
  10. “failed”: 0
  11. },
  12. “_seq_no”: 1,
  13. “_primary_term”: 1
  14. }

document结果

  1. {
  2. “_index”: “ecommerce”,
  3. “_type”: “product”,
  4. “_id”: “1”,
  5. “_version”: 2,
  6. “found”: true,
  7. “_source”: {
  8. “name”: “jiaqiangban gaolujie yagao”
  9. }
  10. }

注意点

  1. document是不可变的,如果要修改document的内容,可以通过全量替换,直接对document重新建立索引,替换里面所有的内容。
  2. es会将老的document标记为deleted(逻辑删除),然后新增我们给定的一个document,当我们创建越来越多的document的时候,es会在适当的时机在后台自动删除(物理删除)标记为deleted的document。
  3. 替换必须带上所有的field,否则其他数据会丢失。

 

 

更新文档(修改)

原理参考:ElasticSearch教程——partial update(更新文档)实现原理及并发控制

  1. POST /ecommerce/product/1/_update
  2. {
  3. “doc”: {
  4. “name”: “jiaqiangban gaolujie yagao”
  5. }
  6. }

返回结果

  1. {
  2. “_index”: “ecommerce”,
  3. “_type”: “product”,
  4. “_id”: “1”,
  5. “_version”: 5,
  6. “result”: “updated”,
  7. “_shards”: {
  8. “total”: 2,
  9. “successful”: 1,
  10. “failed”: 0
  11. },
  12. “_seq_no”: 4,
  13. “_primary_term”: 1
  14. }

document结果

  1. {
  2. “_index”: “ecommerce”,
  3. “_type”: “product”,
  4. “_id”: “1”,
  5. “_version”: 5,
  6. “found”: true,
  7. “_source”: {
  8. “name”: “jiaqiangban gaolujie yagao”,
  9. “desc”: “gaoxiao meibai”,
  10. “price”: 30,
  11. “producer”: “gaolujie producer”,
  12. “tags”: [
  13. “meibai”,
  14. “fangzhu”
  15. ]
  16. }
  17. }

 

 

删除文档(删除)

DELETE /ecommerce/product/1

返回结果

  1. {
  2. “_index”: “ecommerce”,
  3. “_type”: “product”,
  4. “_id”: “1”,
  5. “_version”: 9,
  6. “result”: “deleted”,
  7. “_shards”: {
  8. “total”: 2,
  9. “successful”: 1,
  10. “failed”: 0
  11. },
  12. “_seq_no”: 8,
  13. “_primary_term”: 1
  14. }

document结果

  1. {
  2. “_index”: “ecommerce”,
  3. “_type”: “product”,
  4. “_id”: “1”,
  5. “found”: false
  6. }

注意:

在删除一个document之后,我们可以从侧面证明,它不是立即物理删除的,因为它的一些版本号等信息还是保留的。

 

请求分类

1、query string search

类似这种 搜索全部商品:GET /ecommerce/product/_search(参数直接拼接在请求url上,不带json参数的)

query string search的由来,因为search参数都是以http请求的query string来附带的

搜索商品名称中包含yagao的商品,而且按照售价降序排序:GET /ecommerce/product/_search?q=name:yagao&sort=price:desc

适用于临时的在命令行使用一些工具,比如curl,快速的发出请求,来检索想要的信息;但是如果查询请求很复杂,是很难去构建的,所以在生产环境中,几乎很少使用query string search

 

2、query DSL

DSL:Domain Specified Language,特定领域的语言
http request body:请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search肯定强大多了。

更加适合生产环境的使用,可以构建复杂的查询

1.查询所有的商品

  1. GET /ecommerce/product/_search
  2. {
  3.   “query”: { “match_all”: {} }
  4. }

 

2.查询名称包含yagao的商品,同时按照价格降序排序

  1. GET /ecommerce/product/_search
  2. {
  3.     “query” : {
  4.         “match” : {
  5.             “name” : “yagao”
  6.         }
  7.     },
  8.     “sort”: [
  9.         { “price”: “desc” }
  10.     ]
  11. }

 

3.分页查询

总共3条商品,假设每页就显示1条商品,现在显示第2页,所以就查出来第2个商品

  1. GET /ecommerce/product/_search
  2. {
  3.   “query”: { “match_all”: {} },
  4.   “from”: 1,
  5.   “size”: 1
  6. }

 

4.查询指定项

指定要查询出来商品的名称和价格

  1. GET /ecommerce/product/_search
  2. {
  3.   “query”: { “match_all”: {} },
  4.   “_source”: [“name”, “price”]
  5. }

 

 

5.过滤查询

搜索商品名称包含yagao,而且售价大于25元的商品

  1. GET /ecommerce/product/_search
  2. {
  3.     “query” : {
  4.         “bool” : {
  5.             “must” : {
  6.                 “match” : {
  7.                     “name” : “yagao”
  8.                 }
  9.             },
  10.             “filter” : {
  11.                 “range” : {
  12.                     “price” : { “gt” : 25 }
  13.                 }
  14.             }
  15.         }
  16.     }
  17. }

 

6.full-text search(全文检索)

  1. GET /ecommerce/product/_search
  2. {
  3.     “query” : {
  4.         “match” : {
  5.             “producer” : “yagao producer”
  6.         }
  7.     }
  8. }

7.phrase search(短语搜索)

跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回

  1. GET /ecommerce/product/_search
  2. {
  3.     “query” : {
  4.         “match_phrase” : {
  5.             “producer” : “yagao producer”
  6.         }
  7.     }
  8. }

 

8.多条件查询

名字中有”yagao”,描述上可以有fangzhu也可以没有,价格不能是25元

must表示一定要满足;

should表示可以满足也可以不满足;

must_not表示不能满足该条件;

“minimum_should_match”: 1,表示最小匹配度,可以设置为百分百,详情看源文档Elasticsearch Reference [6.4] » Query DSL » Minimum Should Match,设置了这个值的时候就必须满足should里面的设置了,另外注意这边should里面同一字段设置的多个值(意思是当这个值等于X或者等于Y的时候都成立,务必注意格式

 

  1. GET /ecommerce/_search
  2. {
  3. “query”: {
  4. “bool”: {
  5. “must”: [
  6. {
  7. “match”: {
  8. “name”: “yagao”
  9. }
  10. }
  11. ],
  12. “should”: [
  13. {
  14. “match”: {
  15. “desc”: “fangzhu”
  16. }
  17. },
  18. {
  19. “match”: {
  20. “desc”: “caoben”
  21. }
  22. }
  23. ],
  24. “must_not”: [
  25. {
  26. “match”: {
  27. “price”: 25
  28. }
  29. }
  30. ],
  31. “minimum_should_match”: 1
  32. }
  33. }
  34. }

 

转载请注明:SuperIT » ElasticSearch教程——Kibana简单操作ES

喜欢 (0)or分享 (0)