Search intent: typing vs committed — the funnel nobody measures

Search intent: typing vs committed — the funnel nobody measures — IndexFox blog cover

Most search analytics dashboards lie. They show you a number called "searches" that is, in practice, the count of keystrokes the user fired while typing. It is not a measurement of intent. It is a measurement of latency between key presses.

Three events, not one

Inside IndexFox we collect three distinct events from the widget:

  • typing — partial queries fired as the user types, debounced. Useful for autocomplete UX. Mostly noise for analytics.
  • committed — the user stopped typing for > N ms or pressed Enter. This is the real search.
  • click — the user selected a result. This is the real outcome.

The funnel that matters is: typing → committed → click. The dashboard customers actually look at is built on the bottom two events.

Why ClickHouse

Search analytics is high-cardinality, append-only, and we slice it by time. That's the textbook ClickHouse workload. We use it for raw event storage and for the dashboard's aggregations, with a TTL policy that keeps the last 90 days hot and rolls older data into compacted summaries. The data path is widget → backend → ClickHouse → dashboard. No application-side caching, because the query patterns are simple enough that ClickHouse beats any cache we'd write.

What the data tells us

A few patterns that repeat across customers, almost without exception:

  • The typing-to-committed ratio is ~8:1. Most "searches" in legacy analytics are partial. The committed query is the only one worth optimizing for.
  • Zero-result committed queries are gold. They're the precise list of things your customers expect to find on your site, but can't. We surface these prominently. It is the single most underrated dashboard tile we ship.
  • Click-through on the first result correlates with reranker quality. When we ship a reranker improvement, top-1 CTR moves within a day. When we ship a UI change, CTR is mostly noise. Measure backend, not bezels.
  • Search sessions are short. A user typically commits 1.4 queries per session, then leaves. Long sessions usually mean they didn't find it.

How to set this up if you're not using IndexFox

You don't need ClickHouse to do this. You need one boolean: is_committed. Fire your existing search event with is_committed = false while the user is typing, and is_committed = true on debounce or Enter. Filter your dashboards by is_committed = true. That single change cleans up 80% of the noise in a typical analytics setup.

The metric that almost nobody tracks

Time from page load to first committed search, segmented by traffic source. Customers who arrive from a referral and search within 5 seconds are different from customers who browse for 90 seconds first. Their queries are different. Their conversion rates are different. The reranker should arguably weight differently for them. We're not there yet — but the data is in the warehouse, waiting.

Want a search widget that does all this for you?

IndexFox crawls your site, runs hybrid + AI search, and ships a widget you install with one script tag. 30-day free trial. No credit card.

Start free trial See how it works →