The Challenge
Continue looking after the shopper saves a search
For secondhand shoppers, finding the right item often comes down to timing. A photo can capture exactly what someone wants, but a suitable item may not be available in their size or budget when they search.
GEM already offered keyword-based search in two forms: shoppers could search the current inventory interactively, or save their searches and receive alerts when new matching listings arrived. Elasticsearch served both workloads, using its Percolator capability to match incoming listings against stored keyword searches.
GEM then introduced image search, allowing shoppers to find visually similar items using a reference photo. While interactive image search worked, it introduced two challenges.
First, vector search performance fell short of expectations at GEM's scale. Achieving the desired performance would have required substantially more hardware, raising concerns about efficiency and cost.
Second, unlike keyword searches, image searches could not be saved for ongoing alerts because Elasticsearch's Percolator did not support vector similarity matching at the time.
Enabling saved image-search alerts required inverse image search combining vector similarity with structured filters such as size and price. Each incoming listing needed to satisfy the saved searches’ similarity thresholds and filter conditions, returning every qualifying saved search, not just the top-K most similar ones. With around 15 million listing updates a day, that matching had to keep pace with GEM’s inventory.