高级软件工程师
分类 资讯中心 产品中心 最新文章 宁夏消防消防泵 2026/02/25 20:25:09 北京质量fluidlabR-300便携式细胞计数仪售价 2026/02/24 13:44:22 伊犁木箱要多少钱 2026/02/23 20:32:27 余杭区公司福利坚果礼盒加工厂 2026/02/21 17:52:07 杭州小半径对焊管件价格 2026/02/20 18:04:12 海南标准金属工程测量 2026/02/19 19:26:47 推荐文章 网站建设好了怎么进行推广免备案空间主机 2026/01/23 15:37:01 安徽做网站找谁爱站网 关键词挖掘 2026/01/21 19:17:01 饮食中心网站建设方案wordpress科技网站模板 2026/01/22 23:27:01 天津建设网站免费外贸营销推广方案 2026/01/23 14:57:01 网站开发定义名称厦门网站设计公司找哪家福建小程序开发 2026/01/21 19:27:01 杨浦网站建设哪家好彬县网 2026/01/23 13:34:01 制作营销网站公司佛山网站建设zingup 北京孤凡电子商务有限公司 2026/02/28 14:04:40 制作营销网站公司,佛山网站建设zingup,wordpress有那些插件,网页设计培训班网页设计学校Elasticsearch Spring Boot 实战#xff1a;从零构建高性能搜索 API 最近在重构公司电商平台的商品搜索模块时#xff0c;我再次深刻体会到一个事实#xff1a; 传统的 SQL 查询#xff0c;在面对海量商品和复杂关键词匹配时#xff0c;真的扛不住了。 用户输入“苹果…Elasticsearch Spring Boot 实战从零构建高性能搜索 API最近在重构公司电商平台的商品搜索模块时我再次深刻体会到一个事实传统的 SQL 查询在面对海量商品和复杂关键词匹配时真的扛不住了。用户输入“苹果手机”你得理解他是想买 iPhone而不是水果搜索“轻薄本 2024 高性能”要能精准命中符合参数的笔记本更别说还要支持分类筛选、价格排序、品牌过滤……这些需求靠LIKE %xxx%和一堆JOIN表别闹了。于是我们把核心检索逻辑迁移到了Elasticsearch并用Spring Boot快速搭建服务层。整个过程下来不仅响应速度从秒级降到百毫秒内开发效率也大幅提升——这背后正是spring-data-elasticsearch的功劳。今天我就带你一步步走完这个整合流程不讲虚的只聊实战中踩过的坑、用得上的技巧以及那些文档里不会明说但你一定会遇到的问题。为什么是 Elasticsearch Spring Boot先说结论如果你要做的是“搜索”而不是“查数据”那 ES 几乎是唯一靠谱的选择。数据库擅长事务和精确查询但对模糊匹配、相关性评分、高并发读取这些场景就显得力不从心。而 Elasticsearch 天生为搜索而生倒排索引机制让关键词查找飞快分布式架构轻松应对亿级数据近实时NRT特性保证写入后1秒内可搜强大的 DSL 支持布尔查询、聚合分析、地理定位……再加上 Spring Boot 的自动装配能力原本复杂的客户端连接、序列化、异常处理都被封装好了。一句话你只需要关注业务逻辑剩下的交给框架。环境准备与依赖引入版本很重要不同版本之间的客户端差异巨大搞错一个版本可能直接导致连接失败或 API 不兼容。我们使用的是- Spring Boot 3.2.x- Elasticsearch 8.11.0- 官方推荐的 Java API Client不再是旧版的 RestHighLevelClientMaven 依赖如下dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-elasticsearch/artifactId /dependency注意不要手动引入elasticsearch-java或rest-high-level-clientSpring Boot 已经帮你管理好版本依赖了。然后在application.yml中配置连接信息spring: elasticsearch: uris: http://localhost:9200 username: elastic password: your_password_here connection-timeout: 5s socket-timeout: 10s启动项目时你会看到日志输出[elastic-7.x] connected to cluster at http://localhost:9200说明连接成功。如果报错请检查 ES 是否开启安全认证、防火墙是否放行端口。实体类映射让 POJO 成为 ES 文档这是最关键的一步。很多人以为只要加个Document就完事了结果上线后发现搜索不准、排序乱码、中文分词失效……问题全出在这儿。来看我们的商品实体ProductDocument(indexName product) public class Product { Id private String id; Field(type FieldType.Text, analyzer ik_max_word, searchAnalyzer ik_smart) private String title; Field(type FieldType.Keyword) private String category; Field(type FieldType.Double) private Double price; Field(type FieldType.Date, format DateFormat.custom, pattern yyyy-MM-dd HH:mm:ss) private Date createTime; // getter / setter ... }关键点解析Document(indexName product)指定该类对应 ES 中的product索引。建议按业务划分索引比如user_log,article,order等避免单一巨型索引难以维护。Id注解字段作为文档 ID如果你不指定ES 会自动生成 UUID。但在实际项目中建议用自己的业务 ID如商品 SKU便于后续更新和删除。字段类型必须明确声明-FieldType.Text用于全文检索会被分词器切词。-FieldType.Keyword不分词用于精确匹配、聚合、排序。- 数值和日期也要显式标注防止类型推断错误。中文分词设置至关重要analyzer ik_max_word // 写入时用最大粒度切词 searchAnalyzer ik_smart // 查询时用智能模式减少噪音举个例子“苹果手机”-ik_max_word→ 苹果、果手、手机、苹果手机-ik_smart→ 苹果手机如果不设置searchAnalyzer默认也用ik_max_word会导致查询“苹果”也能命中“苹果手机”但相关性混乱。️ 提示确保你的 ES 节点已安装 IK 分词插件 否则会报unknown analyzer错误。Repository 层一行代码实现 CRUDSpring Data 的强大之处在于——你几乎不用写任何 DAO 层代码。定义一个接口继承ElasticsearchRepository即可获得所有基础操作public interface ProductRepository extends ElasticsearchRepositoryProduct, String { // 根据标题模糊查询方法名自动解析 ListProduct findByTitleContaining(String title); // 多条件组合 分页 PageProduct findByCategoryAndPriceBetween( String category, Double minPrice, Double maxPrice, Pageable pageable ); // 自定义 DSL 查询 Query( { bool: { must: [ { match: { title: ?0 } }, { range: { price: { gte: ?1 } } } ] } } ) PageProduct searchByCustomQuery(String keyword, Double minPrice, Pageable pageable); }方法命名规则你能用多久Spring Data 支持通过方法名自动推导查询逻辑常见关键字包括关键字对应 ES 查询Containingmatchtext 字段Likewildcard慎用性能差BetweenrangeIn/NotIntermsIsTrue/IsFalseterm所以findByTitleContainingAndCategory会被翻译成{ query: { bool: { must: [ { match: { title: xxx } }, { term: { category: yyy } } ] } } }但如果逻辑复杂比如嵌套should、must_not或者要用fuzzy模糊查询那就得上Query注解写原生 DSL。Controller 层暴露 RESTful 接口接下来就是最简单的部分了——把 Repository 的能力通过 HTTP 暴露出去。RestController RequestMapping(/api/products) public class ProductController { private final ProductService productService; public ProductController(ProductService productService) { this.productService productService; } GetMapping public ResponseEntityPageProduct searchProducts( RequestParam(required false) String q, RequestParam(defaultValue 0) int page, RequestParam(defaultValue 10) int size ) { Pageable pageable PageRequest.of(page, size, Sort.by(createTime).descending()); PageProduct result productService.search(q, pageable); return ResponseEntity.ok(result); } PostMapping public ResponseEntityProduct create(RequestBody Product product) { Product saved productService.save(product); return ResponseEntity.created(URI.create(/api/products/ saved.getId())).body(saved); } DeleteMapping(/{id}) public ResponseEntityVoid delete(PathVariable String id) { productService.deleteById(id); return ResponseEntity.noContent().build(); } }你看Controller 层根本不碰数据库或 ES所有逻辑都交给 Service。Service 层业务逻辑中枢Service Transactional public class ProductService { private final ProductRepository repository; public ProductService(ProductRepository repository) { this.repository repository; } public PageProduct search(String keyword, Pageable pageable) { if (keyword null || keyword.trim().isEmpty()) { return repository.findAll(pageable); } return repository.searchByCustomQuery(keyword, 0D, pageable); } public Product save(Product product) { // 可在此添加校验、审计等逻辑 product.setCreateTime(new Date()); Product saved repository.save(product); // ⚠️ 注意默认刷新间隔为1秒若需立即可见手动触发 refresh // client.indices().refresh(r - r.index(product)); return saved; } public void deleteById(String id) { repository.deleteById(id); } }关于refresh的坑Elasticsearch 默认每1秒刷新一次索引index.refresh_interval1s意味着你save()后不能立刻查到数据。测试环境可以接受但某些强一致性场景不行。解决方案有两个写入后主动调用 refresh影响性能不推荐高频使用repository.save(product); client.indices().refresh(req - req.index(product));创建索引时关闭自动 refresh改为批量提交时再刷PUT /product { settings: { refresh_interval: -1 } }适用于日志类高频写入场景。常见问题与避坑指南❌ 问题1中文搜索不准“华为手机”搜不到“HUAWEI 手机”原因没有统一文本标准化流程。解决- 使用analyzer: lowercase统一小写- 引入同义词词典synonym将“华为”映射为“HUAWEI”- 在 mapping 中配置properties: { title: { type: text, analyzer: my_custom_analyzer } }analyzer: { my_custom_analyzer: { tokenizer: ik_max_word, filter: [lowercase, my_synonym_filter] } }❌ 问题2排序混乱按价格排序结果是 “100, 1000, 200”原因用了text类型做排序字段记住只有keyword、numeric、date才能用于排序和聚合。text会被分词排序基于分词后的词条毫无意义。❌ 问题3深度分页性能暴跌查第1000页每页20条系统卡死原因ES 的from size最多支持约1万条index.max_result_window。解决方案- 浅分页用Pageable- 深分页改用search_after基于上一页最后一个文档的排序值继续拉取。// 第一次请求 SearchResponseProduct response client.search(s - s .index(product) .size(10) .sort(SortOptions.of(so - so.field(FieldSort.of(f - f.field(price))))) ); ListHitProduct hits response.hits().hits(); ListObject[] searchAfterValues hits.getLast().sort(); // 下一页传入 searchAfterValues .searchAfter(searchAfterValues)生产级最佳实践清单项目建议做法索引设计按业务域拆分索引定期归档冷数据字段类型text 用于搜索keyword 用于过滤/排序/聚合分片策略单个分片建议控制在 10GB~50GB避免过多分片写入优化高频写入使用 Bulk API 批量提交安全性开启 HTTPS Basic Auth限制 IP 白名单监控集成 Prometheus Grafana 监控集群状态、JVM、GC、线程池备份配置 Snapshot Repository 定期快照写在最后这不是终点而是起点当你第一次看到/api/products?q手机price1000-3000在 80ms 内返回精准结果时你会明白搜索的本质不是“找到”而是“快速且准确地找到”。而Elasticsearch Spring Boot正是实现这一目标的最佳拍档。未来随着向量搜索kNN、语义理解如 ELSER、AI 推荐的兴起ES 不再只是一个搜索引擎它正在成为系统的“大脑”——理解意图、预测行为、主动推荐。掌握这套技术栈不只是为了写几个 API更是为了站在数据价值挖掘的前沿。如果你也在做搜索相关功能欢迎留言交流你在实战中的经验或踩过的坑。我们一起把这条路走得更稳、更快。 点赞 () 分享 收藏 返回列表 版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除! 网站建设好了怎么进行推广免备案空间主机网站建设好了怎么进行推广,免备案空间主机,简单网页html模板,有那些专门做职业统计的网站Windows PE:功能、使用与定制全解析 1. Windows PE 概述 Windows PE(Wi
2026/01/23 15:37:01 安徽做网站找谁爱站网 关键词挖掘安徽做网站找谁,爱站网 关键词挖掘,学网站开发有用么,网站首页制作网站、美通社消息#xff1a;史上最长春节假期全面点燃中国旅行者的出境游热情。Airbnb爱彼迎发布《2026年春节出境游趋势》显示#
2026/01/21 19:17:01 饮食中心网站建设方案wordpress科技网站模板饮食中心网站建设方案,wordpress科技网站模板,网络服务器搭建与管理,惠州网络营销公司面试就是大家身边总是存在各种各样的可能,而自身又具备这样的能力,就忍不住想试一试#xff0c;尤其是到了年关
2026/01/22 23:27:01 天津建设网站免费外贸营销推广方案天津建设网站免费,外贸营销推广方案,吉安seo,海淀区网站搭建第一章#xff1a;为什么顶尖工程师都在用Open-AutoGLM沉思模式#xff1f;在人工智能工程实践中#xff0c;模型推理的准确性
2026/01/23 14:57:01 网站开发定义名称厦门网站设计公司找哪家福建小程序开发网站开发定义名称,厦门网站设计公司找哪家福建小程序开发,wordpress主题插件不兼容,网页和网站做哪个好用AutoUnipus智能学习助手#xff1a;2025高效刷课终极解决方案 【免费下载链接
2026/01/21 19:27:01 杨浦网站建设哪家好彬县网杨浦网站建设哪家好,彬县网,深圳十大电商巨头,电子宣传册制作app746.使用最小花费爬楼梯给你一个整数数组 cost #xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。
2026/01/23 13:34:01 做网站市场价格多少百度一下知道首页做网站市场价格多少,百度一下知道首页,seo推广网址,谷歌浏览器下载官方正版drawio-libs图标库终极指南#xff1a;解锁专业图表设计新境界 【免费下载链接】drawio-libs Libra
2026/01/23 12:04:01 在哪网站建设浙江网站建设价格在哪网站建设,浙江网站建设价格,网站上线前做环境部署,外包公司催收合法吗2025年9月8日#xff0c;人工智能企业阶跃星辰#xff08;StepFun#xff09;正式推出图像编辑大模型Step1X
2026/01/23 15:32:01 律所网站建设要求书做分销的官网网站律所网站建设要求书,做分销的官网网站,seo关键字优化价格,网站开发 项目计划书PaddlePaddle镜像深度测评#xff1a;中文自然语言处理表现如何#xff1f; 在当今AI应用快速落地的背景下
2026/01/23 11:36:01 浙江 网站建设龙岗网站建设哪家技术好浙江 网站建设,龙岗网站建设哪家技术好,想做个赚钱的网站不知道做那种,wordpress myqaptcha目录已开发项目效果实现截图关于我系统介绍开发技术路线核心代码参考示例本项目开发思路结论源码l
2026/01/23 08:25:02 © 2025 北京孤凡电子商务有限公司. All rights reserved. 关于我们 使用条款 隐私政策 联系我们智能索引记录
-
2026-02-27 13:45:22
综合导航
成功
标题:杨柳木命配金箔金命,八字相配宜否?_一世迷命理网
简介:生辰八字是根据个人出生的年、月、日、时所排定的命盘,通过分析天干地支的组合,来预测一个人的性格、命运和吉凶。今天,我们将
-
2026-02-28 01:47:56
综合导航
成功
标题:Charlie 2 auf Victor 3
简介:Claus Mobers lotst Flugzeuge an ihre Parkposition
-
2026-02-27 21:01:22
综合导航
成功
标题:福建福能能源管理有限公司招聘-597直聘
简介:597直聘为您提供福建福能能源管理有限公司招聘信息、公司简介、公司地址、公司福利等详细信息,让您在选择福建福能能源管理有
-
2026-02-27 19:46:41
综合导航
成功
标题:USB Type-C® コネクタ「DX07シリーズ」USB4® 対応プラグを販売開始 コネクタ メーカー JAE 日本航空電子工業
简介:日本航空電子工業は、最新のUSB4 Version2.0(伝送速度 最大80Gbps)、USB PD EPR(給電電力
-
2026-02-28 12:06:11
法律咨询
成功
标题:别墅网 - 别墅设计图
简介:别墅网专注提供最新别墅设计图纸、农村自建房全套施工图、3D别墅模型下载。涵盖现代、新中式、欧式等多种风格,专业设计师团队
-
2026-02-27 13:35:02
综合导航
成功
标题:Lt. Gen. (R) Javed Mahmood Bukhari – (Independent Director) JSCLJSCL
简介:Lt. Gen. (R) Javed Mahmood Bukhari held various instructiona
-
2026-02-27 13:33:37
综合导航
成功
标题:PlayStation Universe - PS5, PS4, PSVR, PS Vita News and Reviews
简介:PS5 News, PS4 News, PSVR and PS Vita News, Reviews, Themes,
-
2026-02-28 03:03:39
综合导航
成功
标题:Greystone College Australia Payment Methods
简介:Find Greystone College tuition payment options, including fl
-
2026-02-28 13:13:24
综合导航
成功
标题:Professional Print Shop Sign Company Marketing Services PIP Cary, NC - PIP
简介:PIP Cary, 1074 W. Chatham Street One stop resource for cus
-
2026-02-27 13:46:15
综合导航
成功
标题:角膜炎的治疗方法 - 云大夫
简介:治疗角膜炎要根据不同的病因,选择不同的治疗方案。如果是细菌性的角膜炎,通常是给予患者一些抗感染的药物,比如左氧氟沙星眼药
-
2026-02-28 01:19:57
综合导航
成功
标题:字典_词典_成语_诗词名句-雄安文学网
简介:雄安文学网为您提供新华字典在线查字,支持部首拼音笔画多种查字法。成语解释,成语出处,成语接接龙,古诗词翻译古诗词朗诵,各
-
2026-02-28 00:55:21
综合导航
成功
标题:Kentucky Equine Research - World Leaders In Equine Research & Nutrition
简介:Kentucky Equine Research (KER) is an international equine nu
-
2026-02-28 08:20:39
综合导航
成功
标题:輕鬆上手:iPhone - Apple (香港)
简介:發揮 iPhone 的潛在威力,發掘其最新功能,並了解怎樣自訂 iPhone,讓它專屬於你。
-
2026-02-28 11:18:08
综合导航
成功
标题:Kentucky Equine Research - World Leaders In Equine Research & Nutrition
简介:Kentucky Equine Research (KER) is an international equine nu
-
2026-02-28 03:38:57
综合导航
成功
标题:Amanda Evans – EY-Parthenon Global Government and Infrastructure Leader and Oceania Markets Leader, Strategy and Transactions EY in Kazakhstan
简介:Contact and profile information for Amanda Evans, EY-Parthen
-
2026-02-27 20:34:38
综合导航
成功
标题:its been a while... (pics of new wheels and sounds)
简介:hey all. just thought id share :) http://photobucket.com/
-
2026-02-28 11:32:19
金融理财
成功
标题:50万理财一年(50万理财一年利息多少钱合适)_火必 Huobi交易所
简介:本篇文章给大家谈谈50万理财一年,以及50万理财一年利息多少钱合适对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
-
2026-02-28 08:02:06
综合导航
成功
标题:èæ¥çæ¼é³_èæ¥çææ_èæ¥çç¹ä½_è¯ç»ç½
简介:è¯ç»ç½èæ¥é¢é,ä»ç»èæ¥,èæ¥çæ¼é³,èæ¥æ¯
-
2026-02-28 01:47:00
综合导航
成功
标题:Free Sea Creature Coloring Pages - Detailed Coral Reef with Starfish EDU.COM
简介:Free printable Sea Creature coloring page with starfish and
-
2026-02-28 08:29:51
综合导航
成功
标题:LG’s Amazing Micro LED Picture Quality Meets Bang & Olufsen’s Artistic Sound LG Global
简介:LG is partnering with world-renowned Danish luxury audio com
-
2026-02-28 01:24:06
综合导航
成功
标题:Epic Car: Transform Race - Play The Free Mobile Game Online
简介:Epic Car: Transform Race - click to play online. In Epic Car
-
2026-02-27 19:28:52
综合导航
成功
标题:高端创业融资模板-果果圈模板
简介:这份模板是一份基础的创业融资类模板,包含最基本的创业融资项目。设计元素100%可编辑,您可以使用在相关的融资计划中。
-
2026-02-28 01:13:00
综合导航
成功
标题:原发性肾病综合征用什么药 - 云大夫
简介:原发性肾病综合征最主要药物是免疫抑制剂。免疫抑制剂的作用是抗炎、抗免疫和修复肾小球滤孔屏障,要根据不同病理类型和不同年龄
-
2026-02-28 11:43:56
综合导航
成功
标题:TD Unlimited Chequing Account
简介:Unlimitedoverlay
-
2026-02-27 23:36:50
综合导航
成功
标题:Free Christmas Coloring Page - Stocking by Fireplace EDU.COM
简介:Free printable Christmas coloring page featuring a stocking
-
2026-02-28 03:49:44
综合导航
成功
标题:Los 10 coches nuevos con menor consumo
简介:Estos son los vehículos actuales con menor consumo según las
-
2026-02-28 09:25:49
综合导航
成功
标题:Pressemeldungen und News: CHT Group
简介:Unternehmenskommunikation - Nachrichten und PR aus der CHT G
-
2026-02-27 17:48:04
游戏娱乐
成功
标题:九·秘密-5_毁灭战士黑暗时代全收集攻略-玩具百科隐藏全收集_3DM单机
简介:《毁灭战士:黑暗时代》是id Software打造的全新系列前传,以中世纪风格重塑经典暴力美学,带来前所未有的黑暗幻想体
-
2026-02-27 13:21:57
综合导航
成功
标题:NVE Sensor and Isolator News
简介:NVE is a leader in spintronic Giant Magnetoresistance (GMR)
-
2026-02-28 00:03:53
游戏娱乐
成功
标题:绝地求生N卡怎么设置?画面流畅又清晰这样调-驱动人生
简介:绝地求生N卡怎么设置才能流畅不卡?本文详细讲解 NVIDIA 显卡在 PUBG 中的最佳设置方法,涵盖控制面板与游戏内参