3.1 查看所有索引

image.png

到dev-tool执行ES的API

  1. # 查看索引相关信息
  2. GET kibana_sample_data_ecommerce
  3. # 查看索引的文档总数
  4. GET kibana_sample_data_ecommerce/_count
  5. # 查看前10条文档
  6. POST kibana_sample_data_ecommerce/_search
  7. {}
  8. # _cat indices API 查看目录
  9. GET /_cat/indices/kibana*?v&s=index
  10. # 查看状态为绿的索引
  11. GET /_cat/indices?v&health=green
  12. # 按照文档的个数排序
  13. GET /_cat/indices?v&s=docs.count:desc
  14. # 查看具体字段
  15. GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs,count,mt
  16. # 查看节点健康长度
  17. GET _cluster/health

3.2 文档的CRUD

| Index | PUT my_index/_doc/1

{”user”:”mike”,”component”:”You konw, for searh”}
Create
POST my_index/_doc {不指定id,自动生成}
Read
Update
{”doc”:{}}
Delete
  • Type名 - 约定为_doc
  • Create - 如果ID已存在,会失败
  • Index - 如果ID不存在,则创建新的文档,如果已存在会覆盖原有文档,版本号会增加
  • UPdate - 文档必须已经存在,更新只会对相应字段做增量修改
  1. # create document 自动生成_id
  2. POST users/_doc
  3. {
  4. "user":"Mike",
  5. "component":"trying out kibana"
  6. }
  7. # create document 指定ID,如果ID已经存在则报错
  8. PUT users/_doc/1?op_type=create
  9. {
  10. "user":"Jack",
  11. "component":"trying out kibana"
  12. }
  13. # create document 指定ID,如果ID已存在则会报错
  14. PUT users/_create/2
  15. {
  16. "user":"Tom",
  17. "component":"trying out kibana"
  18. }
  19. # GET document
  20. GET users/_doc/1
  21. # Index修改
  22. PUT users/_doc/1
  23. {
  24. "user":"Demo",
  25. "component":"trying out kibana"
  26. }
  27. # UPDATE修改
  28. POST users/_update/1
  29. {
  30. "doc":{
  31. "component":"Hello, Elasticsearch",
  32. "sign":"smallwolf"
  33. }
  34. }
  35. ## Bulk API 在一次请求中,执行多次不同的操作
  36. POST _bulk
  37. {"index": {"_index":"test","_id":"1"}}
  38. {"field1":"value1"}
  39. {"delete":{"_index":"test","_id":"2"}}
  40. {"create":{"_index":"test2","_id":"3"}}
  41. {"field1":"value3"}
  42. {"update":{"_id":"1", "_index":"test"}}
  43. {"doc":{"field2":"value2"}}
  44. ## 批量读取 mget
  45. GET _mget
  46. {
  47. "docs": [
  48. {
  49. "_index":"test",
  50. "_id":1
  51. },
  52. {
  53. "_index":"test",
  54. "_id":"2"
  55. }
  56. ]
  57. }
  58. ## msearch操作
  59. GET users/_msearch
  60. {}
  61. {"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
  62. {}
  63. {"query" : {"match_all" : {}}}
  64. {"index" : "users"}
  65. {"query" : {"match_all" : {}}}

3.3 Search API

3.2.1 URL Search 在URL中使用查询参数

URL查询

  • 使用“q“,指定查询字符串
  • ”query string syntax“ KV键值对
  1. curl -XGET "http://elasticsearch:9200/bibana_sample_data_ecommerce/_search?q=customer_first_name:Eddie&sort=year:desc&from=0&size=10"
  2. {"profile":true}
  3. q:用来表示查询的内容
  4. Eddie:搜索叫做Eddie的客户
  5. sort排序/fromsize用于分页
  6. Profile可以查看查询是如何被执行的

3.2.2 Query String Syntas

1. Term and Phrase

  1. # 根据指定字段查询
  2. GET /movies/_search?q=2012&df=title
  3. {
  4. "profile":"true"
  5. }
  6. # 泛查询,正对_all,查询所有字段
  7. GET /movies/_search?q=2012
  8. {
  9. "profile":"true"
  10. }
  11. # Beautiful 或者 Mind 都可以查询出来
  12. GET /movies/_search?q=title:Beautiful Mind
  13. # 使用引号“Beautiful Mind”看作一个词语,Phrase查询
  14. GET /movies/_search?q=title:"Beautiful Mind"
  15. # 分组查询
  16. GET /movies/_search?q=title:(Beautiful Mind)

2. 布尔操作

  • AND / OR / NOT / && / || / !

    • 必须大写
    • title:(matrix NOT reloaded)

      3. 分组

  • +表示must

  • -表示must_not
  • title:(+matrix - reloaded ) ```bash

    使用引号“Beautiful Mind”看作一个词语,Phrase查询

    GET /movies/_search?q=title:”Beautiful Mind”

必须包含Beautiful和Mind

GET /movies/_search?q=title:(Beautiful AND Mind)

必须包含Beautiful,但是不能包含Mind

GET /movies/_search?q=title:(Beautiful NOT Mind)

包含Beautiful,必须包含Mind %2B= ‘+’

GET /movies/_search?q=title:(Beautiful %2BMind)

  1. <a name="T9h3d"></a>
  2. #### 4. 范围查询
  3. 区间表示:[] 闭区间,{}开区间
  4. - year:{2019 TO 2018}
  5. - year:[* TO 2018]
  6. <a name="WtjE6"></a>
  7. #### 5. 算数符号
  8. - year:>2010
  9. - year:(>2010 && <=2018)
  10. - year:(+>2010 +<2018)
  11. ```bash
  12. # 范围查询,区间写法 / 数学写法 查询大于1980
  13. GET /movies/_search?q=year:>1980

6. 通配符查询(效率低,占用内存大,不建议使用)

? 代表一个字符,*代表0或多个字符
title:mi?d
title:be*

7. 正则表达式

title:[bt]oy

8 模糊匹配与近似匹配

  • title:befutifl~1
  • title:"lord rings"~2 加上2的意思是lord和rings之间可以有2个单词的间隔,如果不加2则必须lord和rings相连接

3.2.2 RequestBody Search

将查询语句放到Body中发送给ES进行查询

  1. curl -XGET "http://elasticsearch:9200/kibana_sample_data_ecommerce/_search" -H
  2. 'Content-Type:application/json' -d '
  3. {
  4. "query":{
  5. "match_all":{}
  6. }
  7. }'
  8. kibana_sample_data_ecommerce: 需要操作的索引名
  9. _search: 执行搜索的操作
  10. query: 查询
  11. match_all: 返回所有文档

image.png

1. _source filtering 只查询出来source指定的字段

如果_source没有存储,那就只返回匹配的文档的元数据,source支持通配符

  1. # 只查询出来source指定的字段
  2. POST kibana_sample_data_ecommerce/_search
  3. {
  4. "_source":["order_date"],
  5. "query":{
  6. "match_all":{}
  7. }
  8. }

2. 脚本字段

  1. GET kibana_sample_data_ecommerce/_search
  2. {
  3. "script_fields": {
  4. "new_field": {
  5. "script": {
  6. "lang" :"painless",
  7. "source":"doc['order_date'].value + '_hello'"
  8. }
  9. }
  10. }
  11. , "query": {
  12. "match_all": {}
  13. }
  14. }

响应

  1. "hits" : [
  2. {
  3. "_index" : "kibana_sample_data_ecommerce",
  4. "_type" : "_doc",
  5. "_id" : "havOdn8B5R0dBYvX0uZk",
  6. "_score" : 1.0,
  7. "fields" : {
  8. "new_field" : [
  9. "2022-03-28T09:28:48.000Z_hello"
  10. ]
  11. }
  12. }
  13. ]

3. 短语搜索-Match Phrase

  1. GET kibana_sample_data_ecommerce/_search
  2. {
  3. "query": {
  4. "match_phrase": {
  5. "comment": {
  6. "query":"Song Last Chrismas",
  7. "slop": 1
  8. }
  9. }
  10. }
  11. }
  1. # 包含"Last"或"Christmas"
  2. POST movies/_search
  3. {
  4. "query": {
  5. "match": {
  6. "title": "Last Christmas"
  7. }
  8. }
  9. }
  10. # 包含“Last Christmas”
  11. POST movies/_search
  12. {
  13. "query": {
  14. "match": {
  15. "title": {
  16. "query":"Last Christmas",
  17. "operator": "and"
  18. }
  19. }
  20. }
  21. }
  22. # 查询one love 中间可以间隔一个单词
  23. POST movies/_search
  24. {
  25. "query": {
  26. "match_phrase": {
  27. "title": {
  28. "query": "one love",
  29. "slop":1
  30. }
  31. }
  32. }
  33. }

4. Query String Query

  1. # 设值
  2. PUT /users/_doc/1
  3. {
  4. "name":"Small Wolf",
  5. "about":"java, golang, node, swift, elasticsearch"
  6. }
  7. # 查询Small并且Wolf同时存在
  8. POST users/_search
  9. {
  10. "query": {
  11. "query_string": {
  12. "default_field": "name",
  13. "query": "Small AND Wolf"
  14. }
  15. }
  16. }
  17. POST /users/_search
  18. {
  19. "query": {
  20. "query_string": {
  21. "fields": ["anme", "about"],
  22. "query": "(Small AND Wolf) OR (Java AND Elasticsearch)"
  23. }
  24. }
  25. }

5. Simple Query String Query

  • 类似Query String,但是会忽略错误的语法,同时只支持部分查询语法
  • 不支持AND、OR、NOT,会当作字符串处理
  • Term之间默认的关系是OR。可以指定Operator
  • 支持部分逻辑
    • +替代 AND
    • 替代 OR
    • - 替代NOT ```bash

      Simple Query String Query

      POST /users/_search { “query”: { “simple_query_string”: { “query”: “Small AND Wolf”, “fields”: [“name”] } } }

POST /users/_search { “query”: { “simple_query_string”: { “query”: “Small Wolf”, “fields”: [“name”], “default_operator”: “AND” } } } ```