ElasticSearch(四)【高级查询】

今天药忘吃喽~ 2024-04-06 10:34 135阅读 0赞

四、高级查询


上一篇文章《ElasticSearch - 索引、映射、文档》

说明

ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL,Query DSL是利用Rest API传递JSON格式的请求体(Request Body)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁

语法

  1. ### _doc可选,查询效果都一样
  2. # GET /索引名/_doc/_search {
  3. json格式请求体数据}
  4. # GET /索引名/_search {
  5. json格式请求体数据}

4.1 分词与不分词查询

查询所有文档记录

  1. ### match_all查询文档中所有记录
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "match_all": {
  6. }
  7. }
  8. }

在这里插入图片描述

term关键词分词查询

  1. ### 关键词分词查询 term
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "term": {
  6. "description": {
  7. "value": "blog"
  8. }
  9. }
  10. }
  11. }
  12. 【注意】
  13. 映射类型说明
  14. - integer: 搜索时不分词
  15. - double: 搜索时不分词
  16. - date: 搜索时不分词
  17. - keyword: 搜索时需要输入全部内容,不分词,就像SQL当中的eq
  18. - text: 中文单字分词(一个字一个字进行分隔),英文单词分词(melikeyou...)

在这里插入图片描述

小结

  • 在ES中的Mapping Type中keyword、date、integer、long、double、boolean、这些类型不分词,只有text类型分词
  • 通过使用term查询得知,es默认使用标准分词器(StandardAnalyzer),中文单字分词,英文单词分词

4.2 类型关键字查询

range关键字范围查询

  1. ### 范围查询 range gte ===> 大于等于 lte ===> 小于等于
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "range": {
  6. "price": {
  7. "gte": 0,
  8. "lte": 5
  9. }
  10. }
  11. }
  12. }

prefix关键字前缀查询

  1. ### 前缀查询 prefix
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "prefix": {
  6. "title": {
  7. "value": "vin"
  8. }
  9. }
  10. }
  11. }

wildcard关键字通配符查询

  1. ### 通配符查询 wildcard
  2. # ?用来匹配一个任意字符
  3. # *用来匹配多个任意字符
  4. GET /product/_doc/_search
  5. {
  6. "query": {
  7. "wildcard": {
  8. "description": {
  9. "value": "*blog"
  10. }
  11. }
  12. }
  13. }

ids关键字多id查询

  1. ### 多id查询 ids
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "ids": {
  6. "values": [1,2,3]
  7. }
  8. }
  9. }

fuzzy关键字模糊查询

  1. ### 模糊查询 fuzzy
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "fuzzy": {
  6. "description": "blog"
  7. }
  8. }
  9. }
  10. 【注意】
  11. fuzzy 模糊查询,最大模糊错误必须在[0,2]之间
  12. - 搜索关键字长度为2不允许存在模糊
  13. - 搜索关键字长度为3-5允许一次模糊
  14. - 搜索关键字长度大于5允许最大两次模糊

bool关键字布尔查询

  1. ### 布尔查询 bool
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "bool": {
  6. "must": [
  7. {
  8. "term": {
  9. "price": {
  10. "value": 1.7
  11. }
  12. }
  13. }
  14. ]
  15. }
  16. }
  17. }
  18. GET /product/_doc/_search
  19. {
  20. "query": {
  21. "bool": {
  22. "must": [
  23. {
  24. "ids": {
  25. "values": [1,2,3,4,5,6,7]
  26. }
  27. }
  28. ]
  29. }
  30. }
  31. }
  32. 【注意】
  33. bool可以用来组合多个条件实现复杂查询
  34. - must: 相当于&&同时成立
  35. - should: 相当于||成立一个就行
  36. - must_not: 相当于!非,不能满足任何一个

multi_match关键字多字段查询

  1. ### 多字段查询 multi_match
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "multi_match": {
  6. "query": "vinjcent",
  7. "fields": ["title","description"]
  8. }
  9. }
  10. }
  11. 【注意】
  12. 先根据mapping字段类型分词("title""description"),将查询条件分词之后进行查询该字段(中文单字分词、英文单词分词),如果该字段不分词就会将查询条件作为整体进行查询

query_string关键字默认字段查询

  1. ### 默认字段查询 query_string
  2. # title为keyword类型,不分词(需要全部输入内容符合)
  3. GET /product/_doc/_search
  4. {
  5. "query": {
  6. "query_string": {
  7. "default_field": "title",
  8. "query": "vinjcent"
  9. }
  10. }
  11. }
  12. # description为text类型,分词(根据部分输入内容)
  13. GET /product/_doc/_search
  14. {
  15. "query": {
  16. "query_string": {
  17. "default_field": "description",
  18. "query": "blog"
  19. }
  20. }
  21. }
  22. 【注意】
  23. 根据字段的类型,将查询条件进行分词后进行查询

highlight关键字高亮查询

  1. ### 高亮查询 highlight
  2. # 例如百度搜索spring
  3. GET /product/_doc/_search
  4. {
  5. "query": {
  6. "query_string": {
  7. "default_field": "description",
  8. "query": "blog"
  9. }
  10. },
  11. "highlight": {
  12. "fields": {
  13. "*": {
  14. }
  15. }
  16. }
  17. }
  18. 【注意】
  19. 可以让符合条件的文档中的关键词高亮,高亮并没有修改原始的文档,只是单独将高亮结果单独拿出来
  20. # 自定义高亮标签tags,开启多个字段高亮require_field_match
  21. GET /product/_doc/_search
  22. {
  23. "query": {
  24. "query_string": {
  25. "default_field": "description",
  26. "query": "blog"
  27. }
  28. },
  29. "highlight": {
  30. "pre_tags": ["<span style='color:red;'>"],
  31. "post_tags": ["</span>"],
  32. "require_field_match": "false",
  33. "fields": {
  34. "*": {
  35. }
  36. }
  37. }
  38. }

在这里插入图片描述

在这里插入图片描述

size关键字条数查询

  1. ### 条数查询 size
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "match_all": {
  6. }
  7. },
  8. "size": 2
  9. }
  10. 【注意】
  11. 指定查询结果中返回指定条数目.默认返回值10

from关键字分页查询

  1. ### 分页查询 from size
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "match_all": {
  6. }
  7. },
  8. "from": 0,
  9. "size": 2
  10. }
  11. 【注意】
  12. 用来指定起始返回位置,和size关键字连用可实现分页效果

sort关键字排序

  1. ### 排序 sort
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "match_all": {
  6. }
  7. },
  8. "from": 0,
  9. "size": 2,
  10. "sort": [
  11. {
  12. "id": {
  13. "order": "desc"
  14. }
  15. }
  16. ]
  17. }
  18. 【注意】
  19. desc/asc

_source关键字返回指定字段

  1. ### 返回指定字段 _source
  2. GET /product/_doc/_search
  3. {
  4. "query": {
  5. "match_all": {
  6. }
  7. },
  8. "from": 0,
  9. "size": 2,
  10. "sort": [
  11. {
  12. "id": {
  13. "order": "desc"
  14. }
  15. }
  16. ],
  17. "_source": ["id","title","description"]
  18. }
  19. 【注意】
  20. 是一个数组,在数组中用来指定展示哪些字段

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,135人围观)

还没有评论,来说两句吧...

相关阅读