Typesense Integration for Site Search Turnkey

Users come to the site, type a query... and nothing. Zero results. Or worse — hundreds of pages without filters. Standard MySQL search with `LIKE '%query%'` can't keep up with competition anymore. According to statistics, 70% of users leave a site if they don't find the desired product within the fi

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1287
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1246
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    983
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    1034
  • image_website-sbh_0.webp
    Website development for SBH Partners
    1108
  • image_website-_0.webp
    Website development for Red Pear
    555

Users come to the site, type a query... and nothing. Zero results. Or worse — hundreds of pages without filters. Standard MySQL search with LIKE '%query%' can't keep up with competition anymore. According to statistics, 70% of users leave a site if they don't find the desired product within the first 3 seconds. With LIKE search, response time grows linearly with database size: on 100,000 records it reaches 2-3 seconds. Typesense, however, processes queries in 15-50 ms, which is 200 times faster. We solve this problem by integrating Typesense — a search engine that responds in milliseconds and delivers relevant results even on corpuses of millions of documents. Switching to Typesense saves up to 60% of budget compared to Algolia, and the integration cost pays off in 3-6 months.

Why Typesense?

Typesense is written in C++ and positions itself as a self-hosted alternative to Algolia. Its key feature is a strict collection schema that guarantees data integrity and stable response time (consistently below 50 ms). Unlike Meilisearch, Typesense has built-in clustering via the Raft algorithm, support for vector search via HNSW, and geo-search out of the box. Typesense documentation claims that on a corpus of 10 million documents, average response time does not exceed 30 ms.

Characteristic Typesense Meilisearch
Implementation language C++ Rust
Clustering Built-in (Raft) Absent in OSS
Vector search Yes (HNSW) Yes (since v1.6)
Geo-search Yes, native Yes
Query analytics Built-in Via third-party tools
Strict schema Mandatory Optional

Typesense is two to three times faster than Meilisearch on queries with facets thanks to built-in analytics and more efficient indexing. Our integration experience confirms: after migrating from Elasticsearch, average response time dropped from 200 ms to 15 ms, and search accuracy reached 95%.

How we set up Typesense

The integration process includes 5 steps:

  1. Deployment — running Typesense in a Docker container with API key and port.
  2. Schema creation — defining collections with strict field types and facets.
  3. Indexing — writing a script to sync data from the database to Typesense in batches.
  4. Frontend component — developing a search bar with autocomplete, facets, and sorting.
  5. Fine-tuning — testing relevance, adjusting field weights and synonyms.

Deployment and collection creation

Typesense is easily deployed via Docker. Example docker-compose.yml:

# docker-compose.yml services: typesense: image: typesense/typesense:0.25.2 command: > --data-dir /data --api-key=${TYPESENSE_API_KEY} --listen-port=8108 --enable-cors volumes: - typesense_data:/data ports: - "8108:8108" 

After startup, we create a collection with a strict schema. We must specify field types and facet flag:

{ "name": "products", "fields": [ { "name": "id", "type": "string" }, { "name": "name", "type": "string" }, { "name": "description", "type": "string" }, { "name": "price", "type": "float", "facet": true }, { "name": "category", "type": "string", "facet": true }, { "name": "brand", "type": "string", "facet": true }, { "name": "in_stock", "type": "bool", "facet": true }, { "name": "rating", "type": "float", "optional": true }, { "name": "location", "type": "geopoint","optional": true } ], "default_sorting_field": "rating" } 

Data indexing

We write an indexer in PHP (or Python/Node — per client choice). It loads data from the database into Typesense in batches of 1000 documents. Each document must contain all schema fields. For upsert we use import with action 'upsert':

$documents = $products->map(fn($p) => [ 'id' => (string) $p->id, 'name' => $p->name, 'price' => (float) $p->price, 'category' => $p->category->slug, 'in_stock' => $p->stock > 0, ])->toArray(); $client->collections['products']->documents->import( $documents, ['action' => 'upsert'] ); 

Search with facets on the frontend

On the client side, we implement a search bar with autocomplete (suggestions) and filters by category, brand, price. Typesense returns facet aggregations that allow updating the result count for each filter without a second request.

$results = $client->collections['products']->documents->search([ 'q' => $query, 'query_by' => 'name,description,brand', 'query_by_weights' => '3,1,2', 'filter_by' => 'in_stock:true && price:[100..5000]', 'facet_by' => 'category,brand,price', 'max_facet_values' => 20, 'sort_by' => 'rating:desc', 'per_page' => 20, 'page' => 1, ]); 

How Typesense supports vector search

For semantic search, Typesense accepts embedding vectors. Embeddings are generated on the application side (OpenAI, Cohere), after which the vectors are passed to Typesense. Hybrid search (text + vector) is supported, allowing documents to be found by meaning, not just exact matches. This is especially useful for large product catalogs: for example, the query "inexpensive smartphone with a good camera" will return relevant models even if those words are not in the description.

Common integration mistakes
  • Incorrect schema selection — if a field is not marked as facet, it cannot be used for filtering. Changing the schema after indexing starts is difficult (the collection must be recreated).
  • Too many facet fields — the more facet fields, the slower writes. We recommend no more than 10.
  • Ignoring analytics — Typesense stores query statistics for queries with no results. This data helps improve synonyms and stop words.

What's included in the work?

  • Current search audit — analysis of queries, errors, relevance.
  • Typesense deployment — Docker container on your server or cloud.
  • Collection schema creation — tailored to your data structure.
  • Indexer for synchronization — code in PHP/Node/Python with delta handling.
  • Frontend search component — with autocomplete, facets, sorting, and geo-search (optional).
  • Testing and relevance tuning — field weights, synonyms, stop words.
  • Documentation and training — API and configuration description for your team.
  • Result guarantee — we ensure response time under 50 ms and search accuracy up to 95%.

How long does integration take?

Step Time
Deployment, collection schema 1 day
Indexer + synchronization 2 days
Search with facets on frontend 2–3 days
Vector search (optional) 2 additional days
Tests, relevance 1 day

Standard integration without vector search takes 6–7 working days. The cost is calculated individually — contact us and we'll estimate your project.

Want to improve search on your site? Get in touch — we'll provide a free diagnostic and pilot indexing. Request a consultation right now.