一、基本操作(回顾)

1.1.新建索引

  1. PUT /daxia/user/1
  2. {
  3. "name":"林大侠",
  4. "age": 24,
  5. "desc": "宝剑锋从磨砺出,梅花香自苦寒来",
  6. "tags": ["技术宅","java大牛","架构"]
  7. }

image.png
image.png

1.2.查看数据

image.png

1.3.更新数据之PUT(不建议)

  1. PUT /daxia/user/3
  2. {
  3. "name":"张师傅-v2",
  4. "age": 30,
  5. "desc": "宝剑锋从磨砺出,梅花香自苦寒来",
  6. "tags": ["k歌","安全大牛","架构"]
  7. }

image.png

1.4.更新数据之POST(推荐)

  1. POST /daxia/user/3
  2. {
  3. "name": "张师傅-v3"
  4. }

image.png

1.5.简单的条件查询

  1. GET /daxia/user/_search?q=name:林大侠

image.png

二、复杂操作

select (排序、分页、高亮、模糊查询、精准查询)

2.1.模糊条件查找

hit:
索引和文档信息
查询的结果数
然后就是查询出来的具体文档
数据中的东西是可以遍历出来的
分数:通过来判断谁更符合记过

  1. GET /daxia/user/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "大侠"
  6. }
  7. }
  8. }
  9. #! Deprecation: [types removal] Specifying types in search requests is deprecated.
  10. {
  11. "took" : 312,
  12. "timed_out" : false,
  13. "_shards" : {
  14. "total" : 1,
  15. "successful" : 1,
  16. "skipped" : 0,
  17. "failed" : 0
  18. },
  19. "hits" : {
  20. "total" : {
  21. "value" : 2,
  22. "relation" : "eq"
  23. },
  24. "max_score" : 1.4723402,
  25. "hits" : [
  26. {
  27. "_index" : "daxia",
  28. "_type" : "user",
  29. "_id" : "1",
  30. "_score" : 1.4723402,
  31. "_source" : {
  32. "name" : "林大侠",
  33. "age" : 24,
  34. "desc" : "宝剑锋从磨砺出,梅花香自苦寒来",
  35. "tags" : [
  36. "技术宅",
  37. "java大牛",
  38. "架构"
  39. ]
  40. }
  41. },
  42. {
  43. "_index" : "daxia",
  44. "_type" : "user",
  45. "_id" : "5",
  46. "_score" : 1.3097506,
  47. "_source" : {
  48. "name" : "林大侠111",
  49. "age" : 25,
  50. "desc" : "宝剑锋从磨砺出,梅花香自苦寒来",
  51. "tags" : [
  52. "技术宅",
  53. "java大牛"
  54. ]
  55. }
  56. }
  57. ]
  58. }
  59. }

2.2.模糊条件查找,结果过滤

  1. GET /daxia/user/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "大侠"
  6. }
  7. },
  8. "_source": ["name","desc"]
  9. }

image.png

2.3.模糊条件查找,排序

desc 降序、asc 升序(默认)

  1. GET /daxia/user/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "大侠"
  6. }
  7. },
  8. "sort": [
  9. {
  10. "age":{
  11. "order": "desc"
  12. }
  13. }
  14. ]
  15. }

2.4.模糊条件查找,分页

from 从第几个数据来时
size 返回多少数据(单页面数据)

、search/{current}/{pagesize}

  1. GET /daxia/user/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "大侠"
  6. }
  7. },
  8. "sort": [
  9. {
  10. "age":{
  11. "order": "desc"
  12. }
  13. }
  14. ],
  15. "from": 0,
  16. "size": 1
  17. }

2.5.条件查找-布尔值查询

2.5.1.must命令(类似and)

  1. GET /daxia/user/_search
  2. {
  3. "query":{
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "name": "林大侠"
  9. }
  10. },
  11. {
  12. "match": {
  13. "age": "24"
  14. }
  15. }
  16. ]
  17. }
  18. }
  19. }

image.png

2.5.2.should命令(类似or)

  1. GET /daxia/user/_search
  2. {
  3. "query":{
  4. "bool": {
  5. "should": [
  6. {
  7. "match": {
  8. "name": "林大侠"
  9. }
  10. },
  11. {
  12. "match": {
  13. "age": "24"
  14. }
  15. }
  16. ]
  17. }
  18. }
  19. }

image.png

2.5.3.must_not命令(略)

2.6.条件查找-filter数据过滤

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

  1. GET /daxia/user/_search
  2. {
  3. "query":{
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "name": "林大侠"
  9. }
  10. }
  11. ],
  12. "filter": {
  13. "range": {
  14. "age":{
  15. "gt": 24
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

多个条件进行过滤

  1. GET /daxia/user/_search
  2. {
  3. "query":{
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "name": "林大侠"
  9. }
  10. }
  11. ],
  12. "filter": {
  13. "range": {
  14. "age":{
  15. "gt": 23,
  16. "lt": 26
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }

2.7.精确查询-term

term查询时直接通过倒排索引指定的词条进行精确查询。
关于分词:
term—直接查询精确的
match—会使用分词器解决(先分析文档,再通过分析的文档进行查询)
两个类型:
keyword类型字段:不会被分词器解析
text类型字段: 可以被分词器解析

  1. put testdb
  2. {
  3. "mappings": {
  4. "properties": {
  5. "name": {
  6. "type": "text"
  7. },
  8. "desc": {
  9. "type": "keyword"
  10. }
  11. }
  12. }
  13. }
  14. #########################################造数据########################################
  15. PUT testdb/_doc/1
  16. {
  17. "name": "林大侠说Java name",
  18. "desc": "林大侠说Java desc"
  19. }
  20. PUT testdb/_doc/2
  21. {
  22. "name": "林大侠说Java name",
  23. "desc": "林大侠说Java desc2"
  24. }
  25. #################################text&keyword精确查找比对#################################
  26. GET /testdb/_search
  27. {
  28. "query": {
  29. "term": {
  30. "name": "林" #nametext类型 可以被分词 模糊匹配查询两条
  31. }
  32. }
  33. }
  34. GET /testdb/_search
  35. {
  36. "query": {
  37. "term": {
  38. "desc": "林大侠说Java desc" #desckeyword类型 只能精确匹配一条
  39. }
  40. }
  41. }

image.png

2.7.1.keyword-不被分词

image.png

2.7.2.standard-普通分词器

可以被拆分~
image.png

2.7.3.精确查询多个值

  1. PUT /testdb/_doc/3
  2. {
  3. "t1": "24",
  4. "t2": "2021-09-11"
  5. }
  6. PUT /testdb/_doc/4
  7. {
  8. "t1": "25",
  9. "t2": "2021-09-12"
  10. }
  11. GET testdb/_search
  12. {
  13. "query": {
  14. "bool": {
  15. "should": [
  16. {
  17. "term": {
  18. "t1": "24"
  19. }
  20. },
  21. {
  22. "term": {
  23. "t1": "25"
  24. }
  25. }
  26. ]
  27. }
  28. }
  29. }

image.png
image.png

2.8.高亮查询-highlight

  1. GET /daxia/user/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name" : "林大侠"
  6. }
  7. },
  8. "highlight": {
  9. "fields": {
  10. "name": {}
  11. }
  12. }
  13. }

image.png

2.8.1.自定义高亮条件(pre_tags&post_tags)

  1. GET /daxia/user/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name" : "林大侠"
  6. }
  7. },
  8. "highlight": {
  9. "pre_tags": "<p class='key' style='color:red'>",
  10. "post_tags": "</p>",
  11. "fields": {
  12. "name": {}
  13. }
  14. }
  15. }

image.png
小结

  • 匹配
  • 按照条件匹配
  • 精确匹配
  • 区间范围匹配
  • 匹配字段过滤
  • 多条件查询
  • 高亮查询