百度装修网站,南昌网站建设冲浪者,如何网页设计与制作,横沥做网站2024送书福利正式起航 关注「哪吒编程」#xff0c;提升Java技能 文末送3本《一本书讲透Elasticsearch#xff1a;原理、进阶与工程实践》 大家好#xff0c;我是哪吒。
ElasticSearch是一款由Java开发的开源搜索引擎#xff0c;它以其出色的实时搜索、稳定可靠、快速安… 2024送书福利正式起航 关注「哪吒编程」提升Java技能 文末送3本《一本书讲透Elasticsearch原理、进阶与工程实践》 大家好我是哪吒。
ElasticSearch是一款由Java开发的开源搜索引擎它以其出色的实时搜索、稳定可靠、快速安装和方便使用的特性在Java开发社区中赢得了广泛的认可和应用。
Elasticsearch为Java开发者提供了一个强大的搜索解决方案。无论是对于小型项目还是大型企业级应用Elasticsearch都能提供高效的搜索功能帮助开发者快速检索和处理大量数据。通过其简单的RESTful API接口开发者可以轻松地集成Elasticsearch到他们的Java项目中实现实时更新文档库并从文档中快速检索出符合用户搜索条件的数据。
Elasticsearch的分布式特性使得它在处理海量数据时具有出色的性能。与传统的数据库系统相比Elasticsearch的实时查询处理能力更强能够应对大规模并发搜索请求。同时它还提供了灵活的伸缩性配置可以根据搜索数据规模的增长进行扩展确保系统的稳定性和可用性。
Elasticsearch还具备全文搜索的能力能够将复杂的搜索功能如布尔查询、短语查询、过滤器、排序、分页等都封装进一个平台。这使得Java开发者能够轻松地实现复杂的搜索需求提升用户体验和系统的功能性。
下面是ElasticSearch的基本操作样例学习新技术先用起来其它的再说~
一、索引
1、创建
# 1.创建索引
- PUT /索引名 PUT /products
- 注意: 1.ES中索引健康转态 red(索引不可用) 、yellwo(索引可用,存在风险)、green(健康)2.默认ES在创建索引时回为索引创建1个备份索引和一个primary索引# 2.创建索引 进行索引分片配置
- PUT /products
{settings: {number_of_shards: 1, #指定主分片的数量number_of_replicas: 0 #指定副本分片的数量}
}字符串类型: keyword 关键字 关键词 、text 一段文本
数字类型integer long
小数类型float double
布尔类型boolean
日期类型date
① 创建索引映射
PUT /products
{ settings: {number_of_shards: 1,number_of_replicas: 0}, mappings: {properties: {title:{type: keyword},price:{type: double},created_at:{type: date},description:{type: text}}}
}说明: ES中支持字段类型非常丰富如text、keyword、integer、long、ip 等。更多参见https://www.elastic.co/guide/en/elasticsearch/reference/7.15/mapping-types.html 2、查询
# 查询索引
- GET /_cat/indices?v// 查看某个索引的映射
GET /索引名/_mapping GET /products/_mapping3、删除
# 3.删除索引
- DELETE /索引名 DELETE /products
- DELETE /* *代表通配符,代表所有索引二、文档
1、添加文档
POST /products/_doc/1 #指定文档id
{title:iphone13,price:8999.99,created_at:2021-09-15,description:iPhone 13屏幕采用6.1英寸OLED屏幕。
}POST /products/_doc/ #自动生成文档id
{title:iphone14,price:8999.99,created_at:2021-09-15,description:iPhone 13屏幕采用6.8英寸OLED屏幕
}{_index : products,_type : _doc,_id : sjfYnXwBVVbJgt24PlVU,_version : 1,result : created,_shards : {total : 1,successful : 1,failed : 0},_seq_no : 3,_primary_term : 1
}2、查询文档
GET /products/_doc/1{_index : products,_type : _doc,_id : 1,_version : 1,_seq_no : 0,_primary_term : 1,found : true,_source : {title : iphone13,price : 8999.99,created_at : 2021-09-15,description : iPhone 13屏幕采用6.1英寸OLED屏幕}
}3、删除文档
DELETE /products/_doc/1{_index : products,_type : _doc,_id : 1,_version : 2,result : deleted,_shards : {total : 1,successful : 1,failed : 0},_seq_no : 2,_primary_term : 1
}4、更新文档
PUT /products/_doc/sjfYnXwBVVbJgt24PlVU
{title:iphon15
}说明: 这种更新方式是先删除原始文档,再将更新文档以新的内容插入。 POST /products/_doc/sjfYnXwBVVbJgt24PlVU/_update
{doc : {title : iphon15}
}说明: 这种方式可以将数据原始内容保存,并在此基础上更新。 5、批量操作
POST /products/_doc/_bulk #批量索引两条文档{index:{_id:1}}{title:iphone14,price:8999.99,created_at:2021-09-15,description:iPhone 13屏幕采用6.8英寸OLED屏幕}{index:{_id:2}}{title:iphone15,price:8999.99,created_at:2021-09-15,description:iPhone 15屏幕采用10.8英寸OLED屏幕}POST /products/_doc/_bulk #更新文档同时删除文档{update:{_id:1}}{doc:{title:iphone17}}{delete:{_id:2}}{index:{}}{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、语法
# GET /索引名/_doc/_search {json格式请求体数据}
# GET /索引名/_search {json格式请求体数据}2、测试数据
# 1.创建索引 映射
PUT /products/
{mappings: {properties: {title:{type: keyword},price:{type: double},created_at:{type:date},description:{type:text}}}
}
# 2.测试数据
PUT /products/_doc/_bulk
{index:{}}{title:iphone12 pro,price:8999,created_at:2020-10-23,description:iPhone 12 Pro采用超瓷晶面板和亚光质感玻璃背板搭配不锈钢边框有银色、石墨色、金色、海蓝色四种颜色。宽度:71.5毫米高度:146.7毫米厚度:7.4毫米重量187克}
{index:{}}{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系列铝金属外壳。}
{index:{}}{title:iphone13,price:6000,created_at:2021-09-15,description:iPhone 13屏幕采用6.1英寸OLED屏幕高度约146.7毫米宽度约71.5毫米厚度约7.65毫米重量约173克。}
{index:{}}{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关键字: 返回索引中的全部文档 GET /products/_search
{query: {match_all: {}}
}2、关键词查询(term)
term 关键字: 用来使用关键词查询
GET /products/_search
{query: {term: {price: {value: 4999}}}
}NOTE1: 通过使用term查询得知ES中默认使用分词器为标准分词器(StandardAnalyzer),标准分词器对于英文单词分词,对于中文单字分词。
NOTE2: 通过使用term查询得知,在ES的Mapping Type 中 keyword , date ,integer, long , double , boolean or ip 这些类型不分词只有text类型分词。
3、范围查询[range]
range 关键字: 用来指定查询指定范围内的文档
GET /products/_search
{query: {range: {price: {gte: 1400,lte: 9999}}}
}4、前缀查询[prefix]
prefix 关键字: 用来检索含有指定前缀的关键词的相关文档
GET /products/_search
{query: {prefix: {title: {value: ipho}}}
}5、通配符查询[wildcard]
wildcard 关键字: 通配符查询 ? 用来匹配一个任意字符 * 用来匹配多个任意字符
GET /products/_search
{query: {wildcard: {description: {value: iphon*}}}
}6、多id查询[ids]
ids 关键字 : 值为数组类型,用来根据一组id获取多个对应的文档
GET /products/_search
{query: {ids: {values: [verUq3wBOTjuBizqAegi,vurUq3wBOTjuBizqAegk]}}
}7、模糊查询[fuzzy]
fuzzy 关键字: 用来模糊查询含有指定关键字的文档
GET /products/_search
{query: {fuzzy: {description: iphooone}}
}注意: fuzzy 模糊查询 最大模糊错误 必须在0-2之间
搜索关键词长度为 2 不允许存在模糊搜索关键词长度为3-5 允许一次模糊搜索关键词长度大于5 允许最大2模糊
8、布尔查询[bool]
bool 关键字: 用来组合多个条件实现复杂查询must: 相当于 同时成立should: 相当于|| 成立一个就行must_not: 相当于! 不能满足任何一个
GET /products/_search
{query: {bool: {must: [{term: {price: {value: 4999}}}]}}
}9、多字段查询[multi_match]
GET /products/_search
{query: {multi_match: {query: iphone13 毫,fields: [title,description]}}
}
注意: 字段类型分词,将查询条件分词之后进行查询改字段 如果该字段不分词就会将查询条件作为整体进行查询10、默认字段分词查询[query_string]
GET /products/_search
{query: {query_string: {default_field: description,query: 屏幕真的非常不错}}
}
注意: 查询字段分词就将查询条件分词查询 查询字段不分词将查询条件不分词查询11、高亮查询[highlight]
1highlight 关键字: 可以让符合条件的文档中的关键词高亮
GET /products/_search
{query: {term: {description: {value: iphone}}},highlight: {fields: {*:{}}}
}2自定义高亮html标签: 可以在highlight中使用pre_tags和post_tags
GET /products/_search
{query: {term: {description: {value: iphone}}},highlight: {post_tags: [/span], pre_tags: [span stylecolor:red],fields: {*:{}}}
}3多字段高亮 使用require_field_match开启多个字段高亮
GET /products/_search
{query: {term: {description: {value: iphone}}},highlight: {require_field_match: false,post_tags: [/span], pre_tags: [span stylecolor:red],fields: {*:{}}}
}12、返回指定条数[size]
size 关键字: 指定查询结果中返回指定条数。 默认返回值10条
GET /products/_search
{query: {match_all: {}},size: 5
}13、分页查询[form]
from 关键字: 用来指定起始返回位置和size关键字连用可实现分页效果
GET /products/_search
{query: {match_all: {}},size: 5,from: 0
}14、指定字段排序[sort]
GET /products/_search
{query: {match_all: {}},sort: [{price: {order: desc}}]
}15、返回指定字段[_source]
_source 关键字: 是一个数组,在数组中用来指定展示那些字段
GET /products/_search
{query: {match_all: {}},_source: [title,description]
}
五、一本书讲透Elasticsearch原理、进阶与工程实践
1、内容简介
这是一本关于Elasticsearch技术实战的教程全面覆盖了Elastic Stack技术体系知识旨在帮助读者深入了解Elasticsearch的核心技术和应用场景同时掌握分布式搜索与分析引擎的设计思想和实现原理。
本书共20章分为4大部分
第1部分Elastic Stack全局概览第13章主要讨论Elastic Stack的重要组成部分与应用场景以及Elasticsearch的独特优势。同时初步探索搜索引擎的基础知识及Elasticsearch的核心概念如集群、节点、索引等。最后详细介绍Elasticsearch单节点、多节点集群部署以及Kibana部署等内容。
第2部分Elasticsearch核心技术第414章从从底层原理和实现方法两个层面切入深入解读索引、映射、分词、数据预处理、文档、脚本、检索、聚合、集群、安全和运维等核心
第3部分Elasticsearch进阶指南第1517章主要讨论Elasticsearch各关键操作的基本原理、性能优化方案及实战“避坑”指南等进阶话题。不仅对文档版本冲突及并发控制策略以及更新/删除、写入、段合并、检索等常见操作实现提供了解决方案还从通用、写入、检索3个维度提供了性能优化建议并且讨论了分片、线程池和队列、热点线程、集群规划、客户端选型、缓存、数据建模、性能测试等热点技术提供了Elasticsearch的应用场景和优化方法为企业级实战保驾护航。
第4部分 Elasticsearch项目实战第1820章带领读者将实战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、微服务、设计模式、算法等系列文章。一起学习打卡遇到问题发到群里一起讨论学习比一个人学习效率高的多。
坚持每日学习打卡养成持续学习、持续成长的好习惯。
成功秘诀只有一个那就是卷督促和鞭策自己永不放弃。