做网站贵吗网站建设先进个人材料
2026/6/28 22:23:58 网站建设 项目流程
做网站贵吗,网站建设先进个人材料,南京seo建站,开发小程序需要多少钱难吗刚开始接触 Elasticsearch 时#xff0c;我觉得它就像个黑盒子——数据往里一扔#xff0c;查询语句一写#xff0c;结果就出来了。直到负责公司核心业务的搜索模块后#xff0c;我才发现这个黑盒子里面藏着无数需要注意的细节。 今天就把我在实际项目中积累的 ES 使用经验…刚开始接触 Elasticsearch 时我觉得它就像个黑盒子——数据往里一扔查询语句一写结果就出来了。直到负责公司核心业务的搜索模块后我才发现这个黑盒子里面藏着无数需要注意的细节。今天就把我在实际项目中积累的 ES 使用经验分享给大家主要从索引设计、字段类型、查询优化、集群管理和架构设计这几个方面来展开。索引设计从基础到进阶1. 索引别名alias为变更留条后路刚开始做项目时我习惯直接用索引名。直到有一次需要修改字段类型才发现ES 不支持直接修改映射也不支持修改主分片数必须重建索引。**新增字段是可以的解决方案很简单使用索引别名。业务代码中永远使用别名重建索引时只需要切换别名的指向整个过程用户无感知。这就好比给索引起了个外号里面怎么换内容都不影响外面的人称呼它。2. Routing 路由让查询更精准在做SaaS 电商系统时我发现查询某个商家的订单数据特别慢。原来默认情况下ES根据文档ID的哈希值分配分片导致同一个商家的数据分散在不同分片上。优化方案使用商家 ID 作为routing key存储和查询数据时指定routing key。这样同一个商家的所有数据都会存储在同一个分片上。效果对比优化前查询要扫描所有分片比如3个分片都要查优化后只需要查1个分片结果查询速度直接翻倍资源消耗还更少3. 分片拆分应对数据增长当单个索引数据量持续增长时单纯增加分片数并不是最佳方案。我的经验是业务索引单个分片控制在 10-30GB搜索索引10GB 以内更合适日志索引可以放宽到 20-50GB对于 SaaS 系统ES单索引数据较大且存在“超级大商户”导致数据倾斜严重时可以按商家ID%64取模进行索引拆分比如orders_001到orders_064每个索引包含部分商家的数据然后再根据商户ID指定routing key。请根据业务数据量和业务要求选择最适合的分片拆分规则和routing key路由算法同时不要因为拆分不合理导致ES节点中存在大量分片。ES默认单节点分片最大值为1000(7.0版本后)可以参考ES官方建议堆内存分片数量维持大约1:20的比例字段类型选择比努力重要4. Text vs Keyword理解它们的本质区别曾经有个坑用户手机号用text 类型存储结果搜索完整的手机号却搜不到。原来 text 类型会被分词13800138000可能被拆成138、0013、8000等片段。正确做法需要分词搜索的用text如商品描述需要精确匹配的用keyword如订单号、手机号适合term、terms等精确查询效果keyword 类型的 term 查询速度更快存储空间更小5. 多字段映射multi-fields按需使用不浪费ES 默认会为 text 字段创建 keyword 子字段但这并不总是必要的。我的选择确定字段需要精确匹配和聚合时启用multi-fields只用于全文搜索时禁用 multi-fields好处节省存储空间提升写入速度6. 排序字段选对类型提升性能用 keyword 字段做数值排序是个常见误区。比如价格排序100会排在99前面因为它是按字符串顺序比较的。推荐做法数值排序用long、integer类型时间排序用date类型提升效果排序速度提升明显内存占用也更少查询优化平衡速度与精度7. 模糊查询了解正确的打开方式在ES 7.9 之前wildcard 查询是个性能陷阱。它基于正则表达式引擎前导通配符会导致全量词项扫描。现在的方案ES7.9使用wildcard 字段类型优势底层使用优化的n-gram二进制 doc value机制性能提升显著8. 分页查询避免深度分页的坑产品经理曾要求实现无限滚动我展示了深度分页的性能数据后大家达成共识业务层面避免深度分页才是根本解决方案。就像淘宝、Google 这样的大厂也都对分页做了限制这不仅是技术考量更是用户体验的最优选择。技术方案仅在确实无法避免时考虑浅分页使用from/size适合前几页的常规分页Scroll适合大数据量导出但需要维护 scroll_id 和历史快照对服务器资源消耗较大search_after基于上一页最后一条记录进行分页但无法跳转任意页面且频繁查询会增加服务器压力需要强调的是这些技术方案都存在各自的局限性业务设计上的规避始终是最佳选择。集群管理保障稳定运行9. 索引生命周期自动化运维日志数据的特点是源源不断如果不加管理磁盘很快就会被撑满。我的做法按天创建索引如 log_20231201设置保留策略保留7天或30天结合模板自动化管理10. 准实时性理解刷新机制很多新手会困惑为什么数据写入后不能立即搜索原理ES 默认 1 秒刷新一次索引这是为了在实时性和写入性能之间取得平衡。调整建议实时性要求高保持 1s写入量大适当调大 refresh_interval补充说明如果需要更新后立即能查询到通常有两种方案让前端直接展示刚提交的数据等下一次调用接口时再查询 ES更新完后前端延迟 1.5 秒后再查询关键点业务需求不一定都要后端实现可以结合前端一起考虑解决方案。11. 内存配置32G 限制的真相为什么 ES 官方建议不要超过 32G 内存技术原因Java 的压缩指针技术在 32G 以内有效超过这个限制会浪费大量内存。实践建议单个节点配置约50%内存留出部分给操作系统。架构设计合理的分工协作12. ES 与数据库各司其职曾经试图在 ES 里存储完整的业务数据结果遇到数据一致性问题。现在的方案ES存储搜索条件和文档 ID数据库存储完整业务数据查询ES 找 ID数据库取详情好处既享受 ES 的搜索能力又保证数据的强一致性。13. 嵌套对象保持数据关联性处理商品规格这类数组数据时用普通的object 类型会导致数据扁平化破坏对象间的关联。解决方案使用nested 类型保持数组内对象的独立性确保查询结果的准确性。14. 副本配置读写平衡的艺术副本可以提升查询能力但也不是越多越好。经验值大多数场景1 个副本足够高查询压力可适当增加注意副本越多写入压力越大写在最后这些经验都是在解决实际问题中慢慢积累的。就像修路一样开始可能只是简单铺平随着车流量的增加需要不断优化——设置红绿灯、划分车道、建立立交桥。使用 ES 也是同样的道理随着业务的发展需要不断调整和优化。最大的体会是理解原理比记住命令更重要。只有明白了为什么这样设计才能在遇到新问题时找到合适的解决方案。如果有人问我ES 怎么才能用得更好我的回答是先理解业务场景再选择技术方案。就像我们之前做的模糊搜索不是简单地用 wildcard而是根据 ES 版本选择最优解。技术的价值不在于多复杂而在于能否优雅地解决实际问题。与大家共勉。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询