How it works

How AI semantic search actually works on WooCommerce.

A plain-English explainer for store owners who want to know what changes when you replace default WordPress search with FindAstra. No vendor speak. No buzzwords without definitions. Just what the math does and how it shows up in your storefront.

10 min readLast updated May 2026

The problem with WooCommerce's default search

WooCommerce ships with WordPress's built-in search, which is a SQL LIKE query against product titles and content. It only matches exact words. If a shopper types "comfortable hiking shoes" and your catalog has "Trail Running Sneakers Cushioned", default search returns nothing — not because you don't sell what they want, but because the words don't line up.

That zero-result page is a conversion killer. Baymard Institute's e-commerce research puts the rate at which shoppers abandon a session after a failed search at around 30%. Every dead-end search bar is a lost sale.

FindAstra replaces that LIKE query with semantic search: matching by meaning instead of by characters. Here's what that looks like on a real storefront.

See the difference

The same query. The same shopper. Two different outcomes.

Real screenshots from a live WooCommerce store. Toggle to flip between FindAstra active and default WC search.

Querynike
A shopper types a brand name your catalog doesn't carry verbatim.
Trail Running Sneakers + Performance Polo — the products your shopper actually wanted."No products were found matching your selection." That shopper just left.
Trail Running Sneakers + Performance Polo — the products your shopper actually wanted.

These are real screenshots from a WooCommerce + Storefront install — not mockups. The query "nike" against a catalog that doesn't sell Nike-branded products returns a literal zero on default WC, two semantically-related products on FindAstra.

The three things you need to know about embeddings

Semantic search is built on embeddings — a way to turn words into numbers. Three things to know:

1. Every product becomes a 384-number fingerprint

When FindAstra indexes your store, every product (title + categories + description + ACF fields) goes through an embedding model — a small neural network trained to read English. The model outputs a list of 384 numbers between -1 and 1. That list is the product's "fingerprint" in meaning-space. Products that mean similar things end up with similar fingerprints.

For example, "Trail Running Sneakers Cushioned", "Mountain Trek Boots Waterproof", and "Hiking Daypack 28L" all sit close together in this 384-dimensional space — the model learned at training time that they relate to outdoor activity. They don't share many words, but they share meaning.

2. The shopper's query gets its own fingerprint

When a shopper types "comfortable hiking shoes", that phrase goes through the same model and becomes its own 384-number fingerprint. The shopper's intent is now in the same meaning-space as your products.

3. The closest fingerprints win

FindAstra compares the shopper's query fingerprint to every product fingerprint using cosine similarity — a standard mathematical operation that measures how aligned two vectors are. The top-K closest matches become the search results, ranked by closeness.

That's the whole trick. No magic. No external service required for the default engine. The full match runs in pure PHP (or in the shopper's browser on the free tier) and adds 20–30ms to a query.

Three engines, one plugin

FindAstra lets you pick which embedding model powers the search. All three share the same storage and ranking code — switching engines just means re-indexing.

FindAstra admin — Engine tab showing Local, Hugging Face, and OpenAI tier choices

The Engine picker in the FindAstra admin. Pick a tier, save, re-index.

Tier 3 — Local (free, default)

The default engine runs the model entirely in the shopper's browser using @huggingface/transformers (transformers.js) and the quantized Xenova/bge-small-en-v1.5 model. The model is ~33 MB and gets cached after the first visit. $0 forever. No keys, no accounts, no recurring cost. This is the same model class many commercial vector databases use under the hood — you just get it without paying.

Tier 2 — Hugging Face (paid plans, BYOK free tier)

Server-side embedding via Hugging Face's Inference API. Default model is BAAI/bge-small-en-v1.5 (the same family as Tier 3 but without the browser-side overhead). For multilingual stores, the admin can switch to BAAI/bge-m3, which handles 100+ languages. The free tier covers about 30,000 queries per month — plenty for most stores.

Tier 1 — OpenAI (paid plans, BYOK)

Server-side embedding via OpenAI's text-embedding-3-small model at 384 dimensions. Best overall quality. Costs the store owner about $2/year — OpenAI charges fractions of a cent per query, and embedding-only usage is cheap.

What happens when nobody matches

Sometimes a query genuinely doesn't match anything in your catalog — new shopper, niche request, typo. Default WC shows them an empty results page; FindAstra doesn't.

Every search runs through a fallback chain: admin-curated pinned products first (set in FindAstra → Fallback), then WooCommerce Featured products, then best-sellers by total sales, then most recent. The shopper sees a polite "No exact matches — here are some popular products" notice and a grid of products you actually want to push. Empty results pages become impossible.

FindAstra admin — Fallback tab showing the curated pin list

The Fallback tab. Pin specific product IDs first; the rest of the chain handles itself.

What about huge catalogs?

On stores with 5,000+ indexed products, comparing the query to every product on every search becomes wasteful — even at 30ms per match, you don't want O(n) on every keystroke. FindAstra automatically switches to a hybrid retrieval path:

  1. MySQL FULLTEXT index on wp_posts.post_title + post_content narrows candidates to the top 200 by keyword relevance.
  2. FindAstra re-ranks those 200 by semantic similarity.
  3. The top hits are returned.

Same end result, ~10x faster on big catalogs. The threshold is configurable via the findastra_hybrid_threshold filter for store owners who want to tune it.

The shopper's experience, step by step

Here's what FindAstra actually does on a live storefront:

  1. Shopper types in the theme's search bar. Could be the header, sidebar, or a Gutenberg search block — FindAstra auto-attaches to all standard WC theme search inputs.
  2. Live autocomplete dropdown. 180ms after each keystroke, FindAstra queries both a SQL prefix index (for partial matches like "adjustabl") and the semantic engine. The dropdown shows product thumbnails, names, and prices.
  3. Shopper hits Enter or clicks a result. They either go straight to a product page or to the search results page (the WC product archive), already ranked by semantic relevance.
  4. Every search gets logged. The admin sees zero-result queries as catalog gaps — products shoppers want that you don't stock. PII-free (no IP, no user agent).

Setup takes three minutes

  1. Install and activate the plugin like any other WordPress plugin.
  2. Open FindAstra → Settings in wp-admin. Pick an engine (Local works without any key).
  3. Click Index now on the right. Wait for it to finish.

Open your storefront, type a search. The autocomplete dropdown and the results page are both wired automatically — no theme edits, no template overrides.

FindAstra admin — General tab showing engine picker, index status, and quick-start guide

The General tab. Pick, save, index — that's the whole setup.

Frequently asked questions

For a longer FAQ covering pricing, refunds, and developer hooks, see the homepage FAQ. Below are the questions specific to how the search engine works.

Questions, answered

The honest FAQ.

No. The default engine is the Local tier. It runs entirely in your shoppers' browsers. Zero API keys, zero accounts, $0 forever. If you want server-side quality, Pro adds the Hugging Face engine (its API tier is free up to about 30,000 requests per month) and the OpenAI engine, which costs roughly $2 a year for an average store.

No. AI scoring runs inside your existing database and adds about 20 to 30 milliseconds to a typical search. Indexing is asynchronous and chunked, so it never blocks admin. The Local tier offloads work to the shopper's browser entirely.

There is no renewal. $89, once. Lifetime updates included. If the plugin author disappeared tomorrow, you'd still have a working plugin forever. All your data lives in your own database, on your own host.

Almost certainly. FindAstra hooks into the standard WooCommerce search query, so wherever your theme renders search results, our ranking shows up. Tested against Storefront, Astra, Kadence, Blocksy, GeneratePress, and 30 other popular WooCommerce themes.

Supported in FindAstra Pro since v0.10: it detects each translated product's language at index time (WPML and Polylang work out of the box) and stores one embedding per product-and-language pair, so shoppers on /fr/ get French results and shoppers on /de/ get German. The free version's Local engine is English-first.

Not in v1. FindAstra is designed for single-site WooCommerce installs. Multisite is on the v2 roadmap.

No. v1 is text-to-text only. Image-based search is an obvious next step but explicitly out of scope for v1.

Yes, two ways. There's a free version on WordPress.org you can install and run on your own store at $0 — no account, no API key. And there's a live interactive demo in the hero on this page. If you do buy a paid plan and it's not for you, there's a 30-day no-questions money-back guarantee.

No. WooCommerce's built-in search is a literal keyword match against product titles and descriptions, inherited from WordPress. It has no understanding of synonyms or intent — Baymard Institute's research found 61% of e-commerce sites fail on the descriptive, real-world ways shoppers actually search. AI search for WooCommerce always comes from a plugin or an external service; FindAstra is the option that runs the AI inside the shopper's browser.

Yes. FindAstra's free version on WordPress.org runs true semantic search with its in-browser Local engine: no API keys, no account, no product cap, and nothing locked behind a timer. Most other 'AI search' options for WooCommerce are hosted services with monthly fees.

Anywhere from $0 to hundreds per month, depending on the model. Hosted SaaS search services (Doofinder, Luigi's Box, Searchanise) typically start around €29–$99 per month, forever. FindAstra's Local engine is $0 forever, and Pro is a one-time $89 for one site with no subscription. If you use Pro's OpenAI engine, the embedding API costs roughly $2 a year for an average store.

Search that understands.
One-time payment.

Install in 3 minutes. Pick your engine. Stop losing sales to bad search.

Free version on WordPress.org. 30-day money-back guarantee on paid plans. No subscription, ever.