When Elasticsearch is overkill for Bitrix e-commerce
I wrote about why Elasticsearch is a UX tool, not just a speed layer. Since then, three clients have asked me the same question.
Catalog search judged by revenue: Elasticsearch mapping, synonyms and Russian morphology, typos, facets, autocomplete, zero-downtime reindexing and zero-result logs. Plus the cases where plain SQL is enough.
14 articles
I wrote about why Elasticsearch is a UX tool, not just a speed layer. Since then, three clients have asked me the same question.
A vendor pitched vector search for our catalog. 40,000 SKUs. Elasticsearch already running — fuzzy configured, synonyms tuned, function_score boosting by margin and stock.
We needed to add a Russian morphology analyzer to an index with 80,000 products. I had no plan for how to do it live.
For three weeks we couldn't figure out why the price filter wasn't working. Elasticsearch was up. Queries were coming in. Results were returning. But the price range — say, $15 to $50 — was being ignored completely. Products at $180 and $3 showed up side by side.
We ran an A/B test. The control group ranked search results by text relevance. The test group used a scoring function that factored in margin, stock levels, and sell-through rate. Click-through was nearly identical. Revenue per search session was 12% higher in the business-ranked variant.
A client asked: "What are our customers actually searching for?" I pulled up Elasticsearch and exported the top 40 zero-results queries from the past week. Three of them were exact product names. In stock. Just written differently than the catalog.
We rebuilt search three times on one project.
Zero results is a red flag in the dashboard. Obvious. Gets filed as a bug.
A customer searched, found what they needed, clicked — and got "out of stock." They left. Later, a support ticket: "your search is broken." I opened the logs. The search wasn't broken. It returned exactly what was in the index an hour ago.
Three weeks of Elasticsearch setup (shards, replicas, mappings, custom tokenizers) got us to where fuzziness AUTO dropped zero-results from 22% to 11%. A real improvement. But 11% of searchers were still leaving empty-handed. I pulled the logs and found the problem wasn't typos. It was synonyms.
One of the first queries after we launched new search on a 28,000 SKU catalog: "samsunk phone."
We added Elasticsearch to a 28,000 SKU catalog and assumed the hard part was done. Search works, products show up, response times are fine. A month later I opened the no-results query logs.
The color filter was there. It sat at position 22 in the sidebar.
We spent three weeks on Elasticsearch. Two of those weeks were infrastructure: mapping, shards, replication, Russian morphology analyzers. Everything worked.