Based in Chicago 芝加哥 Backend Software Engineer
Product Search
Product Search / Product Search   Product Search / Product Search    Product Search / Product Search   Product Search / Product Search   

Personal Project, 2026

A multi-stage hybrid search engine that combines keyword search, semantic embeddings, rank fusion, and a neural reranker, with a web UI over a 423k-product catalog.

Category Search & Machine Learning
Role Solo Engineer
Benchmark Amazon ESCI (8,955 queries, 1.2M products)
Catalog 423k products
Product search results page

Overview

Short shopping queries like "aeropress" or "storage bin 52qt with lid" break single-method search: keyword matching misses synonyms, while embeddings drift toward topically related but wrong items. This project builds a four-stage retrieval pipeline where each stage fixes a different failure mode.

BM25 handles exact brands, model numbers, and specs. Dense retrieval (sentence-transformer embeddings + FAISS) catches paraphrases and category-level intent. Reciprocal Rank Fusion merges the two candidate pools, and a cross-encoder reranker jointly reads each (query, product) pair to fix the final order.

On the Amazon ESCI benchmark the full pipeline lifts Hits@1 from 0.296 to 0.374 over BM25 alone, and a Flask web UI runs the same pipeline live at about 110 ms per query on a laptop GPU.

Results

Hits@1: 0.296 → 0.374

The top result is an exact match for 26% more queries than with BM25 alone, measured on 8,955 judged ESCI queries.

MRR@10: 0.385 → 0.474

Relevant products rank higher on average. The cross-encoder rerank delivered the largest single-stage gain.

~110 ms per Query

End-to-end latency for all four stages over 423k products, using exact FAISS search on an RTX 5050 laptop GPU.

Controlled Experiments

The embedding model is a swappable component, so the MiniLM vs. BAAI bge-small comparison changed only the encoder.

Key Features

Hybrid Retrieval

BM25 and dense retrieval each pull 50 candidates, merged with Reciprocal Rank Fusion because their failure modes barely overlap.

Neural Reranking

A cross-encoder scores each (query, title) pair jointly, demoting look-alikes such as "AeroPress Movie" below actual coffee makers.

Stage-by-Stage Search UI

Switch between BM25, dense, RRF, and the full pipeline on the same query, with per-stage latency and badges showing which retriever found each result.

Pipeline Tracing

Each product's detail panel shows its rank at every stage, making it easy to see how fusion and reranking changed the order.

Technologies

Python PyTorch Sentence Transformers FAISS BM25 (bm25s) Cross-Encoders Pandas Flask JavaScript CUDA

Gallery

MORE PROJECTS EXPLORE
More Works   More Works   More Works   More Works    More Works   More Works   More Works   More Works   
GPU Animation
GPU Animation (01)
2389 Research
2389 Research (02)
Carbonbusters
Carbonbusters (03)