写点什么

优化 Uber 的搜索基础设施:升级至 Apache Lucene 9.5

  • 2024-12-09
    北京
  • 本文字数:1005 字

    阅读完需:约 3 分钟

优化 Uber 的搜索基础设施:升级至Apache Lucene 9.5

最近,Uber 工程团队宣布升级其搜索基础设施,从 Apache Lucene 8.0 升级到 9.5 版本。此次升级提高了 Uber 各项服务的搜索能力、性能和效率。


在一篇博文中,来自 Uber 搜索平台和数据工程团队的 Anand Kotriwal、Aparajita Pandey、Charu Jain 和 Yupeng Fu 详细阐述了本次升级工作。Uber 搜索平台有一个可靠的架构,包括服务层(读取路径)和摄取层(写入路径),以及用于离线处理的组件。


服务层负责处理用户查询,并从 Lucene 索引中检索信息。它主要包含两个部分:路由服务和搜索服务,前者将传入的查询定向到适当的搜索节点,并管理负载均衡;后者查询 Lucene 索引,实时检索结果。


当数据发生变化时,摄取层会更新 Lucene 索引。基于 Apache Flink 的摄取服务会处理实时更新,确保搜索索引保持最新。


对于离线处理,Uber 使用离线作业。这些 Apache Spark 作业可以处理批量索引创建和重建,高效地处理大量数据,构建或重建 Lucene 索引。



图片来源:Lucene:Uber 搜索平台版本升级


工程团队修改了一个单独的特性分支,单体存储库中受影响的文件有 400 多个,而这些文件与当前的代码库并不兼容。为了解决这个问题,团队选择了分阶段上线 Lucene 更新。首先,他们将其部署到优先级较低的内部用例中,然后再逐步扩展到更高的层级上。


整个过程耗时约 6 个月,包括全面的代码审查、验证、与客户团队合作以及合并分支前的分级推广。


Apache Lucene 是一个基于 Java 的搜索引擎库。它支持各种搜索需求,包括结构化搜索和全文搜索、分面搜索、最近邻搜索、拼写纠正和查询建议。它还有一个子项目 PyLucene,为 Lucene Core 提供 Python 绑定。


最近,他们发布了第 10 个版本,新增一个预取 APIIndexInput(支持对文档值做稀疏索引),并升级了 Snowball 字典,进而改进了分词。


本次升级提高了 Uber 的搜索速度和效率。搜索运行速度更快,使用的资源更少,也就是说应用程序用户可以更快地获得搜索结果。按照该团队的说法,有些搜索现在比以前快了 30%,使用该应用的乘客和司机都可以获得更好的体验。


这次升级的另一个好处来自对 Uber 基础设施的影响。Uber 的搜索请求严重依赖 CPU 能力,因此降低 CPU 使用率至关重要。这有助于削减基础设施成本,使 Uber 能够减少为多个客户提供服务所需的机器数量。


Uber 升级 Lucene 版本凸显了在技术驱动的大规模运营中保持核心技术与时俱进的重要性。


原文链接:


https://www.infoq.com/news/2024/11/uber-search-infra-lucene-upgrade/


2024-12-09 08:004823

评论

发布
暂无评论
发现更多内容

从资金荒、恒大事件看区块链技术在供应链金融上的应用价值

CECBC

区块链 供应链物流

速度(Velocity)不背这个锅

BY林子

敏捷开发 估算与计划

云原生在京东丨基于 Tekton 打造下一代云原生 CI 平台

京东科技开发者

ci 云原生 Tekton

深度详解企业CRM系统,体验软件快速开发平台

Marilyn

敏捷开发 快速开发 CRM

在算力“沃土”上,种植互联网下一个奇迹十年

脑极体

老公熬夜都要看的:从基础到进阶的Java面试题,助你2021年金三银四拿下大厂offer。

996小迁

Java 编程 架构 面试 计算机

蘑菇街大牛熬夜整理的Spring MVC知识点总结(思维导图+源码笔记),免费分享文档资料

Java架构之路

Java 程序员 架构 面试 编程语言

Servlet-技术专题-Servlet3异步原理与实践

码界西柚

java安全编码指南之:ThreadPool的使用

程序那些事

java安全编码 java编码指南 java安全编码指南 java代码规范

架构师第一期作业(第5周)

Cheer

作业

MySQL-技术专题-聚集索引和慢查询

码界西柚

目标2025:通信产业在能源变局中拥抱智能未来

脑极体

sync-player:使用websocket实现异地同步播放视频

GoEasy消息推送

websocket 数据同步 实时通信

架构师训练营第五周学习总结

邓昀垚

极客大学架构师训练营

用Python加载数据的5种不同方式

计算机与AI

Python 数据处理

最新版MySQL在MacOS上的安装与使用

王磊

MySQL

十八、深入Python函数

刘润森

Python

go-zero 如何应对海量定时/延迟任务?

万俊峰Kevin

定时任务 时间轮 microservice 延迟任务 Go 语言

PLSQL 过程语言-结构化查询语言

Flychen

发挥区块链技术优势 确保食品安全

CECBC

区块链技术 信任机制

帆软授权失效处理

Flychen

手把手带你玩转 openEuler | openEuler 的使用

openEuler

操作系统 openEuler

忘记MySQL密码怎么办?一招教你搞定!

王磊

MySQL

金九银十期间成功斩获58万架构师Offer!六面字节跳动面经和面试题分享

Java架构追梦

Java 学习 架构 面试 JVM

详解GaussDB(DWS) explain分布式执行计划

华为云开发者联盟

数据库 计划 数据

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(四)

陈泽云

人工智能 大数据 数据结构 操作系统 数据存储

spring-boot-route(二十)Spring Task实现简单定时任务

Java旅途

Java Spring Boot Spring Task

APP 莫名崩溃,开始以为是 Header 中 name 大小写的锅,最后发现原来是容器的错!

程序员小航

Java bug Header携带签名 工作笔记 问题排查

iOS底层原理之—dyld与objc的关联

iOSer

ios开发 iOS Developer dyld objc

MySQL-技术专题-联合索引最左前缀匹配原则

码界西柚

优化 Uber 的搜索基础设施:升级至Apache Lucene 9.5_后端_Aditya Kulkarni_InfoQ精选文章