ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Rest风格说明

2022-03-27 09:34:26  阅读:176  来源: 互联网

标签:keyword GET text Rest cat 说明 风格 文档 查询


Rest风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁更有层次更易于实现缓存等机制。

基本Rest命令说明:

methodurl地址描述
PUT(创建,修改) localhost:9200/索引名称/类型名称/文档id 创建文档(指定文档id)
POST(创建) localhost:9200/索引名称/类型名称 创建文档(随机文档id)
POST(修改) localhost:9200/索引名称/类型名称/文档id/_update 修改文档
DELETE(删除) localhost:9200/索引名称/类型名称/文档id 删除文档
GET(查询) localhost:9200/索引名称/类型名称/文档id 查询文档通过文档ID
POST(查询) localhost:9200/索引名称/类型名称/文档id/_search 查询所有数据

测试

1、创建一个索引,添加

  1. PUT /test1/type1/1
  2. {
  3. "name" : "流柚",
  4. "age" : 18
  5. }

2、字段数据类型

  • 字符串类型
    • text、keyword
      • text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;
      • keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
  • 数值型
    • long、Integer、short、byte、double、float、half floatscaled float
  • 日期类型
    • date
  • te布尔类型
    • boolean
  • 二进制类型
    • binary
  • 等等…

3、指定字段的类型(使用PUT)

类似于建库(建立索引和字段对应类型),也可看做规则的建立

  1. PUT /test2
  2. {
  3. "mappings": {
  4. "properties": {
  5. "name": {
  6. "type": "text"
  7. },
  8. "age":{
  9. "type": "long"
  10. },
  11. "birthday":{
  12. "type": "date"
  13. }
  14. }
  15. }
  16. }

4、获取3建立的规则

  1. GET test2

5、获取默认信息

_doc 默认类型(default type),type 在未来的版本中会逐渐弃用,因此产生一个默认类型进行代替

  1. PUT /test3/_doc/1
  2. {
  3. "name": "流柚",
  4. "age": 18,
  5. "birth": "1999-10-10"
  6. }
  7. GET test3

如果自己的文档字段没有被指定,那么ElasticSearch就会给我们默认配置字段类型

扩展:通过get _cat/ 可以获取ElasticSearch的当前的很多信息!

  1. GET _cat/indices
  2. GET _cat/aliases
  3. GET _cat/allocation
  4. GET _cat/count
  5. GET _cat/fielddata
  6. GET _cat/health
  7. GET _cat/indices
  8. GET _cat/master
  9. GET _cat/nodeattrs
  10. GET _cat/nodes
  11. GET _cat/pending_tasks
  12. GET _cat/plugins
  13. GET _cat/recovery
  14. GET _cat/repositories
  15. GET _cat/segments
  16. GET _cat/shards
  17. GET _cat/snapshots
  18. GET _cat/tasks
  19. GET _cat/templates
  20. GET _cat/thread_pool

6、修改

两种方案

①旧的(使用put覆盖原来的值)

  • 版本+1(_version)
  • 但是如果漏掉某个字段没有写,那么更新是没有写的字段 ,会消失
  1. PUT /test3/_doc/1
  2. {
  3. "name" : "流柚是我的大哥",
  4. "age" : 18,
  5. "birth" : "1999-10-10"
  6. }
  7. GET /test3/_doc/1
  8. // 修改会有字段丢失
  9. PUT /test3/_doc/1
  10. {
  11. "name" : "流柚"
  12. }
  13. GET /test3/_doc/1

②新的(使用post的update)

  • version不会改变
  • 需要注意doc
  • 不会丢失字段
  1. POST /test3/_doc/1/_update
  2. {
  3. "doc":{
  4. "name" : "post修改,version不会加一",
  5. "age" : 2
  6. }
  7. }
  8. GET /test3/_doc/1

7、删除

  1. GET /test1
  2. DELETE /test1

8、查询(简单条件)

  1. GET /test3/_doc/_search?q=name:流柚

9、复杂查询

test3索引中的内容

①查询匹配
  • match:匹配(会使用分词器解析(先分析文档,然后进行查询))

  • _source:过滤字段

  • sort:排序

  • formsize 分页

  1. // 查询匹配
  2. GET /blog/user/_search
  3. {
  4. "query":{
  5. "match":{
  6. "name":"流"
  7. }
  8. }
  9. ,
  10. "_source": ["name","desc"]
  11. ,
  12. "sort": [
  13. {
  14. "age": {
  15. "order": "asc"
  16. }
  17. }
  18. ]
  19. ,
  20. "from": 0
  21. ,
  22. "size": 1
  23. }

②多条件查询(bool)
  • must 相当于 and
  • should 相当于 or
  • must_not 相当于 not (... and ...)
  • filter 过滤
  1. /// bool 多条件查询
  2. //// must <==> and
  3. //// should <==> or
  4. //// must_not <==> not (... and ...)
  5. //// filter数据过滤
  6. //// boost
  7. //// minimum_should_match
  8. GET /blog/user/_search
  9. {
  10. "query":{
  11. "bool": {
  12. "must": [
  13. {
  14. "match":{
  15. "age":3
  16. }
  17. },
  18. {
  19. "match": {
  20. "name": "流"
  21. }
  22. }
  23. ],
  24. "filter": {
  25. "range": {
  26. "age": {
  27. "gte": 1,
  28. "lte": 3
  29. }
  30. }
  31. }
  32. }
  33. }
  34. }

③匹配数组
  • 貌似不能与其它字段一起使用
  • 可以多关键字查(空格隔开)— 匹配字段也是符合的

  • match 会使用分词器解析(先分析文档,然后进行查询)

  • 搜词
  1. // 匹配数组 貌似不能与其它字段一起使用
  2. // 可以多关键字查(空格隔开)
  3. // match 会使用分词器解析(先分析文档,然后进行查询)
  4. GET /blog/user/_search
  5. {
  6. "query":{
  7. "match":{
  8. "desc":"年龄 牛 大"
  9. }
  10. }
  11. }

④精确查询
  • term 直接通过 倒排索引 指定词条查询
  • 适合查询 number、date、keyword ,不适合text
  1. // 精确查询(必须全部都有,而且不可分,即按一个完整的词查询)
  2. // term 直接通过 倒排索引 指定的词条 进行精确查找的
  3. GET /blog/user/_search
  4. {
  5. "query":{
  6. "term":{
  7. "desc":"年 "
  8. }
  9. }
  10. }

⑤text和keyword
  • text:
    • 支持分词全文检索、支持模糊、精确查询,不支持聚合,排序操作;
    • text类型的最大支持的字符长度无限制,适合大字段存储;
  • keyword:
    • 不进行分词直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。
    • keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果
  1. // 测试keyword和text是否支持分词
  2. // 设置索引类型
  3. PUT /test
  4. {
  5. "mappings": {
  6. "properties": {
  7. "text":{
  8. "type":"text"
  9. },
  10. "keyword":{
  11. "type":"keyword"
  12. }
  13. }
  14. }
  15. }
  16. // 设置字段数据
  17. PUT /test/_doc/1
  18. {
  19. "text":"测试keyword和text是否支持分词",
  20. "keyword":"测试keyword和text是否支持分词"
  21. }
  22. // text 支持分词
  23. // keyword 不支持分词
  24. GET /test/_doc/_search
  25. {
  26. "query":{
  27. "match":{
  28. "text":"测试"
  29. }
  30. }
  31. }// 查的到
  32. GET /test/_doc/_search
  33. {
  34. "query":{
  35. "match":{
  36. "keyword":"测试"
  37. }
  38. }
  39. }// 查不到,必须是 "测试keyword和text是否支持分词" 才能查到
  40. GET _analyze
  41. {
  42. "analyzer": "keyword",
  43. "text": ["测试liu"]
  44. }// 不会分词,即 测试liu
  45. GET _analyze
  46. {
  47. "analyzer": "standard",
  48. "text": ["测试liu"]
  49. }// 分为 测 试 liu
  50. GET _analyze
  51. {
  52. "analyzer":"ik_max_word",
  53. "text": ["测试liu"]
  54. }// 分为 测试 liu
⑥高亮查询
  1. /// 高亮查询
  2. GET blog/user/_search
  3. {
  4. "query": {
  5. "match": {
  6. "name":"流"
  7. }
  8. }
  9. ,
  10. "highlight": {
  11. "fields": {
  12. "name": {}
  13. }
  14. }
  15. }
  16. // 自定义前缀和后缀
  17. GET blog/user/_search
  18. {
  19. "query": {
  20. "match": {
  21. "name":"流"
  22. }
  23. }
  24. ,
  25. "highlight": {
  26. "pre_tags": "<p class='key' style='color:red'>",
  27. "post_tags": "</p>",
  28. "fields": {
  29. "name": {}
  30. }
  31. }
  32. }

标签:keyword,GET,text,Rest,cat,说明,风格,文档,查询
来源: https://www.cnblogs.com/flyer-ovo/p/16061909.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有