Capability 20 · Search Systems

Search Systems

Find anything in seconds, even when you don't remember what you're looking for.

Before you read: Written from live engineering practice — the money-moving, million-user work our team runs on our own products, set down so anyone building something can learn from it.

01 · What it is

A product with data is only as good as its ability to find it again. We build search that finds things fast even when the user is fuzzy about the term — full-text and fuzzy matching, facets and filters that narrow a thousand results to the right five, autocomplete that saves keystrokes, and ranking tuned to your content rather than a default configuration. It spans documents and records, tolerates typos with a straight face, and stays quick as the collection grows from thousands to millions.

What a search systems build covers:

  • Full-text & fuzzy search with correct relevance
  • Facets, filters & autocomplete that speed up real searches
  • Ranking tuned to your content & your users
  • Search across documents, records & attachments
  • Typo-tolerant matching without degrading results
  • Fast results even at very large collection sizes
What we do · How we do it — as TGJOF Enterprise

This is how we do Search Systems

Search works when the right result is first, for a user who cannot remember the exact spelling, the exact term or the exact category. We engineer relevance the way a recommendation engine is tuned — ranking signals, analyzers, synonyms and facets that match how the business actually names its own data. Typo tolerance and 'did you mean' are not garnish; they are the difference between a user who finds it and a user who assumes it does not exist. Nothing about that is default, and nothing about it is left to chance.

What we do

  • Relevance tuned to the domain — title, recency, authority and popularity carry different weights per content type, so the first result is usually the right one.
  • Typo tolerance that keeps intent — fuzzy matching absorbs misspellings and swaps without flooding results with noise.
  • Faceted search that narrows to the handful — category, status, price, region and date filters take thousands of hits down to the ones worth opening.
  • An index that stays honest — near-real-time sync, idempotent upserts and zero-downtime reindexing keep the searchable truth current and duplicate-free.
  • Search analytics wired back in — zero-result rate, top failed queries and first-click behaviour feed synonyms, content fixes and ranking changes.

How we do it

  • Define 'right' before touching the index — we document what the top result must be for the most important queries, then encode those signals into ranking.
  • Tune the language, not the defaults — stemming, stop words and synonym maps are configured for the vocabulary users actually type, including the domain's own jargon.
  • Make facets a designed surface — filters are built off indexed metadata with pre-computed counts, so narrowing is instant even on large collections.
  • Measure the first click — ranking changes are evaluated against real behaviour — did users find it first time? — not against opinions.
  • Roll changes out without downtime — alias swaps and versioned mappings let analyzer and ranking updates land with no gap in service.

02 · The full discipline

A product with data is only as good as its search. We build search that finds it fast, even when the user is fuzzy.

The fastest way to kill user trust is to hide information behind a search that does not work. People do not remember exact IDs, spellings or the precise field names your database uses — they remember fragments, typos creep in, and they search the way they speak. If the first result is wrong, or the right result is on page three, they assume the data is not there.

We build search systems the way a live payments platform demands: fast, relevant and resilient at scale. Because KodiiPay surfaces properties, units, tenants, transactions, bills and documents that matter in financial decisions, search must be correct under load, tolerant of mistakes and explainable when results look odd. We index across sources, rank for your domain and track failed searches to reveal what users actually wanted.

Below is how we build search that moves from 'search box' to 'find fast'. From full-text indexing and typo tolerance to faceting, synonyms, autocomplete and search analytics — every layer is engineered to surface the right result first, without trading away performance or correctness.

03

Search is relevance engineering, not string matching

A simple `LIKE '%term%'` is not search — it is scanning. Real search understands language, tolerates typos, weighs signals and ranks what matters most for your domain. We treat search as relevance engineering: define what 'right' means for your users, encode those signals into ranking, and measure whether the first result is usually the correct one.

  • Relevance over recall alone — showing 500 results is useless if the right one is not in the top 5; we optimise for 'right result first'.
  • Domain-tuned ranking — titles, recency, authority, completeness and popularity carry different weights per content type (properties vs transactions vs documents).
  • Fuzzy matching that respects intent — typo tolerance without flooding results with noise.
  • Language-aware — handle stemming, stop words, synonyms and Kenya/domain terminology so users search the way they speak.
  • Precision under pressure — fast at ten searches and at ten thousand searches per minute, without degrading relevance.
  • Explainable when tuned — ranking signals are explicit, so changes can be tested and justified.

Generic defaults fail quickly on domain-specific data. We tune ranking to your content and your users — because 'find fast' means the first click is the right one.

The toolchain

The search systems toolchain

We choose search infrastructure for relevance, speed, correctness and operability — with an emphasis on explainable ranking and predictable cost.

stack.toolchain

01

Indexing & engines

Store and query at scale

  • Elasticsearch/OpenSearchDistributed full-text search with BM25, analyzers, synonyms, fuzzy matching and faceting at scale.
  • MeilisearchBlazing-fast, typo-tolerant search with simple relevance tuning and low ops overhead.
  • TypesenseInstant search-as-you-type with typo tolerance, faceting and simple ranking rules.
  • Postgres full-text (tsvector)Great for smaller datasets or when keeping search inside the primary DB is preferred.
  • Weaviate/pgvectorVector search for semantic/AI-assisted search where hybrid relevance is needed.

02

Relevance & tuning

Make the first result right

  • BM25/custom scoringField boosts (title > description), recency decay, popularity/authority signals.
  • Synonyms & thesauriDomain vocabulary mapping so users find terms as they speak.
  • Analyzers/stemmingLanguage-appropriate tokenisation for English/Swahili terms where relevant.
  • Fuzzy queriesLevenshtein/typo tolerance with prefix search for autocomplete.
  • Learning-to-rank (optional)Click-based re-ranking only when search analytics show enough signal to justify it.

03

Data ingestion & sync

Keep indexes fresh and correct

  • Change Data Capture (CDC)Debezium/log-based sync so indexes update near-real-time as source data changes.
  • Bulk reindexingSafe, zero-downtime reindex with alias swaps for schema/ranking changes.
  • Queue-based indexingReliable async indexing for documents/attachments with retries and backpressure.
  • Idempotent upsertsDocument IDs prevent duplicates on retries/replays.
  • Attachment extractionExtract text from PDFs/Docs so documents are searchable, not just filenames.

04

UX features

Help users find faster

  • Autocomplete/typeaheadPrefix search with debouncing, highlighting and recent/popular suggestions.
  • Facets & filtersNarrow thousands to the right few (status, property, county, price, date range).
  • Multi-source unified searchOne box across records, documents, attachments and conversations.
  • Highlighting/snippetsShow matched context so users know why a result appeared.
  • Did-you-mean/spellcheckSuggest corrections when queries return few results.
  • Saved searchesPower users can save frequent filters/queries.

05

Analytics & quality

Measure and improve relevance

  • Search analyticsTrack queries, clicks, CTR, zero-result rate and top failed searches.
  • A/B ranking testsTest ranking changes against real click behaviour before rolling out.
  • Query loggingAnonymised logs to identify synonyms, misspellings and missing content.
  • Relevance metricsTrack click-through, dwell time and 'first result clicked' to quantify improvement.
  • Zero-results miningTurn failed searches into synonyms, content fixes or UX improvements.

06

Performance & scale

Fast under load

  • Sharding & replicasHorizontal scaling for high QPS with read replicas for heavy traffic.
  • CachingCache popular queries/autocomplete results with short TTLs to reduce load.
  • Index optimisationTune mappings, analyzers and refresh intervals for latency/cost balance.
  • Rate limitingProtect search clusters from abuse while keeping UX smooth.
  • Multi-regionReduce latency for distributed teams where needed.

07

Security & governance

Search without leaking data

  • Document-level securityFilter results by user/org/property (RLS-aware) so users only see what they can access.
  • Query sanitisationPrevent injection and resource-heavy wildcard queries.
  • PII minimisationIndex only searchable fields; avoid indexing unnecessary PII in highlights where possible.
  • Audit logsLog sensitive/admin searches for auditability without logging full PII.
  • Access controlRead/write permissions scoped per index/source.

Lifecycle

Search systems lifecycle

We build search that earns trust: define relevance, index correctly, rank deliberately, measure continuously.

01

01 · Discovery

Identify top user tasks, common queries, failure cases and what 'right result first' means.

02

02 · Content audit

Map searchable entities (records, docs, attachments), fields, recency and authority signals.

03

03 · Relevance design

Define ranking weights by entity type, required boosts and business priorities.

04

04 · Schema & analyzers

Design mappings, tokenisation, stemming, stop words and synonyms for domain language.

05

05 · Indexing strategy

Choose engine, ID strategy, CDC/bulk sync, attachment extraction and zero-downtime reindex.

06

06 · Build index

Ingest sample data, test analyzers, tune fuzzy/prefix settings.

07

07 · Ranking tuning

Iterate BM25/boosts against representative queries until top-1 is correct.

08

08 · UX build

Autocomplete, facets/filters, highlighting, snippets, 'did-you-mean'.

09

09 · Security

Document-level filters by tenant/property/org; PII minimisation and query guards.

10

10 · Performance

Sharding/replicas, caching, rate limits, latency targets and load tests.

11

11 · Analytics

Instrument search analytics, zero-results mining and click tracking.

12

12 · Measure & iterate

Track CTR/zero-results/first-click; A/B tune and prune noise monthly.

Closing

More than development

We build search that finds fast — engineered for relevance, tolerance and trust:

Relevance-first: optimise for 'right result first', not just total count.Domain-tuned ranking (title, recency, authority, popularity) per content type.Full-text + typo tolerance with fuzzy matching that preserves intent.Synonyms, stemming and domain language so users search as they speak.Facets/filters to narrow thousands to the right few in seconds.Autocomplete/typeahead with debouncing and relevant suggestions.Unified search across records, documents, attachments and conversations.Zero-downtime reindexing with alias swaps for safe changes.Near-real-time indexing via CDC/queues with idempotent upserts.Attachment text extraction so PDFs/Docs are actually searchable.Document-level security (tenant/property/org) — results filtered by access.Search analytics: queries, clicks, CTR, zero-result rate and failed searches.Zero-results mining turned into synonyms and content fixes.Highlighting/snippets show why each result matched.Did-you-mean/spellcheck for low-result queries.Sharding, replicas and caching for sub-second latency at scale.Rate limiting and query guards against heavy/abusive queries.PII minimisation and audit logging with access-aware filtering.Explainable ranking signals — tunable, testable, justifiable.A/B ranking tests against real click behaviour.Hybrid ready (keyword + semantic) when it meaningfully improves relevance.Multi-source indexing with consistent relevance across tables.Kenya/mobile-first UX with fast autocomplete on low bandwidth.You own mappings, analyzers, synonyms, ranking rules and analytics.

Search is not a feature — it is the fastest path to the answer. Everything above exists so users find what they need in seconds, not minutes.

Find fast. Find right. First time.

Previous capability

Data & Analytics

Next capability

Cloud Engineering

Building something like this?

The discipline above is what we run on our own products every day. If it would help on yours, our door is open.