ElasticSearch常见用法,看这一篇就够了

海哥  金牌会员 | 2024-6-14 23:38:56 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 888|帖子 888|积分 2664

2024送书福利正式起航     关注「哪吒编程」,提拔Java技能     文末送3本《一本书讲透Elasticsearch:原理、进阶与工程实践》   各人好,我是哪吒。
ElasticSearch是一款由Java开发的开源搜刮引擎,它以其出色的及时搜刮、稳定可靠、快速安装和方便使用的特性,在Java开发社区中赢得了广泛的认可和应用。
Elasticsearch为Java开发者提供了一个强盛的搜刮办理方案。无论是对于小型项目还是大型企业级应用,Elasticsearch都能提供高效的搜刮功能,资助开发者快速检索和处理大量数据。通过其简单的RESTful API接口,开发者可以轻松地集成Elasticsearch到他们的Java项目中,实现及时更新文档库,并从文档中快速检索出符适用户搜刮条件的数据。
Elasticsearch的分布式特性使得它在处理海量数据时具有出色的性能。与传统的数据库体系相比,Elasticsearch的及时查询处理本领更强,能够应对大规模并发搜刮请求。同时,它还提供了灵活的伸缩性配置,可以根据搜刮数据规模的增长举行扩展,确保体系的稳定性和可用性。
Elasticsearch还具备全文搜刮的本领,能够将复杂的搜刮功能如布尔查询、短语查询、过滤器、排序、分页等都封装进一个平台。这使得Java开发者能够轻松地实现复杂的搜刮需求,提拔用户体验和体系的功能性。
下面是ElasticSearch的基本操纵样例,学习新技能,先用起来,别的的再说~
一、索引

1、创建

  1. # 1.创建索引
  2. - PUT /索引名 ====> PUT /products
  3. - 注意:
  4. 1.ES中索引健康转态  red(索引不可用) 、yellwo(索引可用,存在风险)、green(健康)
  5. 2.默认ES在创建索引时回为索引创建1个备份索引和一个primary索引
  6.                
  7. # 2.创建索引 进行索引分片配置
  8. - PUT /products
  9. {
  10.   "settings": {
  11.     "number_of_shards": 1, #指定主分片的数量
  12.     "number_of_replicas": 0 #指定副本分片的数量
  13.   }
  14. }
复制代码
字符串类型: keyword 关键字 关键词 、text 一段文本
数字类型:integer long
小数类型:float double
布尔类型:boolean
日期类型:date
① 创建索引&映射
  1. PUT /products
  2. {
  3.   "settings": {
  4.     "number_of_shards": 1,
  5.     "number_of_replicas": 0
  6.   },
  7.   "mappings": {
  8.     "properties": {
  9.       "title":{
  10.         "type": "keyword"
  11.       },
  12.       "price":{
  13.         "type": "double"
  14.       },
  15.       "created_at":{
  16.         "type": "date"
  17.       },
  18.       "description":{
  19.         "type": "text"
  20.       }
  21.     }
  22.   }
  23. }
复制代码

   说明: ES中支持字段类型非常丰富,如:text、keyword、integer、long、ip 等。更多参见https://www.elastic.co/guide/en/elasticsearch/reference/7.15/mapping-types.html
  2、查询

  1. # 查询索引
  2. - GET /_cat/indices?v
复制代码

  1. // 查看某个索引的映射
  2. GET /索引名/_mapping =====> GET /products/_mapping
复制代码

3、删除

  1. # 3.删除索引
  2. - DELETE /索引名 =====> DELETE /products
  3. - DELETE /*     `*代表通配符,代表所有索引`
复制代码

二、文档

1、添加文档

  1. POST /products/_doc/1 #指定文档id
  2. {
  3.   "title":"iphone13",
  4.   "price":8999.99,
  5.   "created_at":"2021-09-15",
  6.   "description":"iPhone 13屏幕采用6.1英寸OLED屏幕。"
  7. }
复制代码
  1. POST /products/_doc/ #自动生成文档id
  2. {
  3.   "title":"iphone14",
  4.   "price":8999.99,
  5.   "created_at":"2021-09-15",
  6.   "description":"iPhone 13屏幕采用6.8英寸OLED屏幕"
  7. }
复制代码
  1. {
  2.   "_index" : "products",
  3.   "_type" : "_doc",
  4.   "_id" : "sjfYnXwBVVbJgt24PlVU",
  5.   "_version" : 1,
  6.   "result" : "created",
  7.   "_shards" : {
  8.     "total" : 1,
  9.     "successful" : 1,
  10.     "failed" : 0
  11.   },
  12.   "_seq_no" : 3,
  13.   "_primary_term" : 1
  14. }
复制代码
2、查询文档

  1. GET /products/_doc/1
复制代码
  1. {
  2.   "_index" : "products",
  3.   "_type" : "_doc",
  4.   "_id" : "1",
  5.   "_version" : 1,
  6.   "_seq_no" : 0,
  7.   "_primary_term" : 1,
  8.   "found" : true,
  9.   "_source" : {
  10.     "title" : "iphone13",
  11.     "price" : 8999.99,
  12.     "created_at" : "2021-09-15",
  13.     "description" : "iPhone 13屏幕采用6.1英寸OLED屏幕"
  14.   }
  15. }
复制代码
3、删除文档

  1. DELETE /products/_doc/1
复制代码
  1. {
  2.   "_index" : "products",
  3.   "_type" : "_doc",
  4.   "_id" : "1",
  5.   "_version" : 2,
  6.   "result" : "deleted",
  7.   "_shards" : {
  8.     "total" : 1,
  9.     "successful" : 1,
  10.     "failed" : 0
  11.   },
  12.   "_seq_no" : 2,
  13.   "_primary_term" : 1
  14. }
复制代码
4、更新文档

  1. PUT /products/_doc/sjfYnXwBVVbJgt24PlVU
  2. {
  3.   "title":"iphon15"
  4. }
复制代码
  说明: 这种更新方式是先删除原始文档,再将更新文档以新的内容插入。
  1. POST /products/_doc/sjfYnXwBVVbJgt24PlVU/_update
  2. {
  3.     "doc" : {
  4.         "title" : "iphon15"
  5.     }
  6. }
复制代码
  说明: 这种方式可以将数据原始内容保存,并在此基础上更新。
  5、批量操纵

  1. POST /products/_doc/_bulk #批量索引两条文档
  2.         {"index":{"_id":"1"}}
  3.                   {"title":"iphone14","price":8999.99,"created_at":"2021-09-15","description":"iPhone 13屏幕采用6.8英寸OLED屏幕"}
  4.         {"index":{"_id":"2"}}
  5.                   {"title":"iphone15","price":8999.99,"created_at":"2021-09-15","description":"iPhone 15屏幕采用10.8英寸OLED屏幕"}
复制代码
  1. POST /products/_doc/_bulk #更新文档同时删除文档
  2.         {"update":{"_id":"1"}}
  3.                 {"doc":{"title":"iphone17"}}
  4.         {"delete":{"_id":2}}
  5.         {"index":{}}
  6.                 {"title":"iphone19","price":8999.99,"created_at":"2021-09-15","description":"iPhone 19屏幕采用61.8英寸OLED屏幕"}
复制代码
  说明:批量时不会由于一个失败而全部失败,而是继续执行后续操纵,在返回时按照执行的状态返回!
  三、高级查询

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

  1. # GET /索引名/_doc/_search {json格式请求体数据}
  2. # GET /索引名/_search {json格式请求体数据}
复制代码
2、测试数据

  1. # 1.创建索引 映射
  2. PUT /products/
  3. {
  4.   "mappings": {
  5.     "properties": {
  6.       "title":{
  7.         "type": "keyword"
  8.       },
  9.       "price":{
  10.         "type": "double"
  11.       },
  12.       "created_at":{
  13.         "type":"date"
  14.       },
  15.       "description":{
  16.         "type":"text"
  17.       }
  18.     }
  19.   }
  20. }
  21. # 2.测试数据
  22. PUT /products/_doc/_bulk
  23. {"index":{}}
  24.   {"title":"iphone12 pro","price":8999,"created_at":"2020-10-23","description":"iPhone 12 Pro采用超瓷晶面板和亚光质感玻璃背板,搭配不锈钢边框,有银色、石墨色、金色、海蓝色四种颜色。宽度:71.5毫米,高度:146.7毫米,厚度:7.4毫米,重量:187克"}
  25. {"index":{}}
  26.   {"title":"iphone12","price":4999,"created_at":"2020-10-23","description":"iPhone 12 高度:146.7毫米;宽度:71.5毫米;厚度:7.4毫米;重量:162克(5.73盎司) [5]  。iPhone 12设计采用了离子玻璃,以及7000系列铝金属外壳。"}
  27. {"index":{}}
  28.   {"title":"iphone13","price":6000,"created_at":"2021-09-15","description":"iPhone 13屏幕采用6.1英寸OLED屏幕;高度约146.7毫米,宽度约71.5毫米,厚度约7.65毫米,重量约173克。"}
  29. {"index":{}}
  30.   {"title":"iphone13 pro","price":8999,"created_at":"2021-09-15","description":"iPhone 13Pro搭载A15 Bionic芯片,拥有四种配色,支持5G。有128G、256G、512G、1T可选,售价为999美元起。"}
复制代码
四、常见检索

1、查询所有[match_all]

   match_all关键字: 返回索引中的全部文档
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "match_all": {}
  5.   }
  6. }
复制代码
2、关键词查询(term)

term 关键字: 用来使用关键词查询
  1. GET /products/_search
  2. {
  3. "query": {
  4.    "term": {
  5.      "price": {
  6.        "value": 4999
  7.      }
  8.    }
  9. }
  10. }
复制代码
NOTE1: 通过使用term查询得知ES中默认使用分词器为标准分词器(StandardAnalyzer),标准分词器对于英文单词分词,对于中文单字分词。
NOTE2: 通过使用term查询得知,在ES的Mapping Type 中 keyword , date ,integer, long , double , boolean or ip 这些类型不分词,只有text类型分词。
3、范围查询[range]

range 关键字: 用来指定查询指定范围内的文档
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "range": {
  5.       "price": {
  6.         "gte": 1400,
  7.         "lte": 9999
  8.       }
  9.     }
  10.   }
  11. }
复制代码
4、前缀查询[prefix]

prefix 关键字: 用来检索含有指定前缀的关键词的相关文档
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "prefix": {
  5.       "title": {
  6.         "value": "ipho"
  7.       }
  8.     }
  9.   }
  10. }
复制代码
5、通配符查询[wildcard]

wildcard 关键字: 通配符查询 ? 用来匹配一个恣意字符 * 用来匹配多个恣意字符
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "wildcard": {
  5.       "description": {
  6.         "value": "iphon*"
  7.       }
  8.     }
  9.   }
  10. }
复制代码
6、多id查询[ids]

ids 关键字 : 值为数组类型,用来根据一组id获取多个对应的文档
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "ids": {
  5.       "values": ["verUq3wBOTjuBizqAegi","vurUq3wBOTjuBizqAegk"]
  6.     }
  7.   }
  8. }
复制代码
7、含糊查询[fuzzy]

fuzzy 关键字: 用来含糊查询含有指定关键字的文档
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "fuzzy": {
  5.       "description": "iphooone"
  6.     }
  7.   }
  8. }
复制代码
注意: fuzzy 含糊查询 最大含糊错误 必须在0-2之间

  • 搜刮关键词长度为 2 不允许存在含糊
  • 搜刮关键词长度为3-5 允许一次含糊
  • 搜刮关键词长度大于5 允许最大2含糊
8、布尔查询[bool]


  • bool 关键字: 用来组合多个条件实现复杂查询
  • must: 相当于&& 同时创建
  • should: 相当于|| 创建一个就行
  • must_not: 相当于! 不能满意任何一个
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "must": [
  6.         {"term": {
  7.           "price": {
  8.             "value": 4999
  9.           }
  10.         }}
  11.       ]
  12.     }
  13.   }
  14. }
复制代码
9、多字段查询[multi_match]

  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "multi_match": {
  5.       "query": "iphone13 毫",
  6.       "fields": ["title","description"]
  7.     }
  8.   }
  9. }
  10. 注意: 字段类型分词,将查询条件分词之后进行查询改字段  如果该字段不分词就会将查询条件作为整体进行查询
复制代码
10、默认字段分词查询[query_string]

  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "query_string": {
  5.       "default_field": "description",
  6.       "query": "屏幕真的非常不错"
  7.     }
  8.   }
  9. }
  10. 注意: 查询字段分词就将查询条件分词查询  查询字段不分词将查询条件不分词查询
复制代码
11、高亮查询[highlight]

(1)highlight 关键字: 可以让符合条件的文档中的关键词高亮
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "term": {
  5.       "description": {
  6.         "value": "iphone"
  7.       }
  8.     }
  9.   },
  10.   "highlight": {
  11.     "fields": {
  12.       "*":{}
  13.     }
  14.   }
  15. }
复制代码
(2)自界说高亮html标签: 可以在highlight中使用pre_tags和post_tags
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "term": {
  5.       "description": {
  6.         "value": "iphone"
  7.       }
  8.     }
  9.   },
  10.   "highlight": {
  11.     "post_tags": ["</span>"],
  12.     "pre_tags": ["<span style='color:red'>"],
  13.     "fields": {
  14.       "*":{}
  15.     }
  16.   }
  17. }
复制代码
(3)多字段高亮 使用require_field_match开启多个字段高亮
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "term": {
  5.       "description": {
  6.         "value": "iphone"
  7.       }
  8.     }
  9.   },
  10.   "highlight": {
  11.     "require_field_match": "false",
  12.     "post_tags": ["</span>"],
  13.     "pre_tags": ["<span style='color:red'>"],
  14.     "fields": {
  15.       "*":{}
  16.     }
  17.   }
  18. }
复制代码
12、返回指定条数[size]

size 关键字: 指定查询结果中返回指定条数。 默认返回值10条
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "match_all": {}
  5.   },
  6.   "size": 5
  7. }
复制代码
13、分页查询[form]

from 关键字: 用来指定起始返回位置,和size关键字连用可实现分页结果
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "match_all": {}
  5.   },
  6.   "size": 5,
  7.   "from": 0
  8. }
复制代码
14、指定字段排序[sort]

  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "match_all": {}
  5.   },
  6.   "sort": [
  7.     {
  8.       "price": {
  9.         "order": "desc"
  10.       }
  11.     }
  12.   ]
  13. }
复制代码
15、返回指定字段[_source]

_source 关键字: 是一个数组,在数组中用来指定展示那些字段
  1. GET /products/_search
  2. {
  3.   "query": {
  4.     "match_all": {}
  5.   },
  6.   "_source": ["title","description"]
  7. }
复制代码
五、一本书讲透Elasticsearch:原理、进阶与工程实践

1、内容简介

这是一本关于Elasticsearch技能实战的教程,全面覆盖了Elastic Stack技能体系知识,旨在资助读者深入了解Elasticsearch的焦点技能和应用场景,同时掌握分布式搜刮与分析引擎的计划思想和实现原理。
本书共20章,分为4大部门:
第1部门Elastic Stack全局概览(第1~3章):紧张讨论Elastic Stack的紧张组成部门与应用场景,以及Elasticsearch的独特上风。同时,初步探索搜刮引擎的基础知识及Elasticsearch的焦点概念,如集群、节点、索引等。末了,详细介绍Elasticsearch单节点、多节点集群摆设以及Kibana摆设等内容。
第2部门Elasticsearch焦点技能(第4~14章):从从底层原理和实现方法两个层面切入,深入解读索引、映射、分词、数据预处理、文档、脚本、检索、聚合、集群、安全和运维等焦点
第3部门Elasticsearch进阶指南(第15~17章):紧张讨论Elasticsearch各关键操纵的基本原理、性能优化方案及实战“避坑”指南等进阶话题。不仅对文档版本辩说及并发控制策略,以及更新/删除、写入、段合并、检索等常见操纵实现提供了办理方案,还从通用、写入、检索3个维度提供了性能优化建议,而且讨论了分片、线程池和队列、热点线程、集群规划、客户端选型、缓存、数据建模、性能测试等热点技能,提供了Elasticsearch的应用场景和优化方法,为企业级实战保驾护航。
第4部门 Elasticsearch项目实战(第18~20章):带领读者将实战Elasticsearch三大焦点业务场景——知识库检索体系、大数据可视化体系、日记体系,意会贯通理论知识和实践技能。
2、作者简介

杨昌玉
10多年工作履历的高级工程师,擅长大数据存储和检索。
曾任职于上市公司、科研院所等,主导过PB级数据存储与检索体系项目,拥有多年Elasticsearch培训及咨询履历。Elastic认证专家、Elasticsearch中国相助培训讲师、Elasticsearch 中文社区2018年、2023年杰出贡献奖(排名Top5)获得者、阿里云MVP(大数据范畴最有代价专家)、CSDN博客专家(排名Top150)、CSDN 2020年度优秀创作者。博客累计阅读量超1000万,并被阿里云、腾讯云、华为云、360doc、51CTO等着名媒体平台全量转载,在CSDN 2013年及2016年的博客征文大赛中获特等奖。“死磕Elasticsearch”知识星球发起人,拥有近2000名付费用户。“铭毅天下Elasticsearch”公众号及博客总计拥有近5万名关注者。成功指导近200人通过Elastic认证专家测验。
购书传送门

3、送 3 本《一本书讲透Elasticsearch:原理、进阶与工程实践》

    2024送书福利正式起航     关注「哪吒编程」,提拔Java技能     点击下方名片,复兴 星球,即可参与     运动截止时间:2024-3-20 21:00:00     哪吒会在朋侪圈公布中奖名单   4、 学习传送门 >>> 哪吒编程,陪伴学习,共同优秀

每天分享Java硬核干货,包罗Java基础、数据库、SSM、SpringBoot、微服务、计划模式、算法等系列文章。一起学习打卡,碰到题目,发到群里,一起讨论学习,比一个人学习服从高的多。
对峙每日学习打卡,养成持续学习、持续发展的好习惯。
成功秘诀只有一个,那就是卷,督促和鞭策本身,永不放弃。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表