TL;DR Uber Freight supports search across 40+ microservices and nearly 100 data sources by composing one shared index from independently owned fragments.
Title: Freight Search: Composing a Shared Search Index from Independently Owned Fragments
URL:
Key points
ă»đ§© Each index field comes from exactly one fragment, so ownership never conflicts
ă»đ§± Fragments merge into one denormalized document, so queries need no joins
ă»âïž Spark handles bootstrap; Flink with CDC handles live ingestion, with changes searchable in seconds
ă»đ· Mappings are generated from Java annotations, so the class is the single source of truth
ă»đ Declare @/LinkedEntity or a fold function and the platform handles parent-child denormalization and 1:N aggregation
ă»đ The SIA-to-OpenSearch migration touched only a few places and applied to every entity
ă»đ About 300 fragments across 20+ indices, thousands of queries per second, p99 in hundreds of milliseconds
Separating business definitions from platform internals is what let the design survive an engine migration.
#
Uber# #
SearchInfrastructure#