Fast, Typo-Tolerant Search in Odoo
with Typesense
How the OCA connector_typesense module connects your Odoo data to a modern, sub-50ms search engine — and why it matters for e-commerce and ERP teams.
Odoo's built-in search is functional — but it's database search. Full-text queries hit PostgreSQL, there's no typo tolerance, no instant-as-you-type results, and no relevance ranking. For product catalogs, knowledge bases, or any customer-facing search bar, that's a real limitation. This is what connector_typesense solves.
What Is Typesense?
Typesense is an open-source search engine built in C++, designed specifically for the use cases where Elasticsearch is overkill and Algolia is too expensive. The key characteristics that make it relevant for Odoo projects:
| Feature | PostgreSQL FTS | Elasticsearch | Typesense |
|---|---|---|---|
| Response time | 100–500ms+ | 50–200ms | < 50ms (RAM index) |
| Typo tolerance | No | Config required | Built-in, on by default |
| Setup complexity | N/A (in Odoo) | High — JVM, cluster tuning | Single binary or Docker |
| Vector / semantic search | Via pgvector | Yes | Yes, with auto-embedding |
| Faceted filtering | Manual SQL | Yes | Yes, built-in |
| Self-hostable, free | Yes | Yes (complex) | Yes, single container |
The core tradeoff with Typesense: it keeps its entire index in RAM, which is what makes it so fast — but it means your server needs enough memory to hold your searchable data. For most Odoo product catalogs (tens of thousands of products), this is not a problem. For datasets in the hundreds of millions, you'd look elsewhere.
Typesense also supports built-in clustering via Raft consensus for high availability — something you'd normally need an enterprise license for in competing engines. The open-source version includes it.
How connector_typesense Works
The module sits inside the OCA search-engine framework — a generic connector layer that handles the binding, synchronization, and export logic between Odoo records and external search indexes. connector_typesense is the Typesense-specific backend for this framework.
The important design decision here: Odoo does not serve search queries directly. Records are indexed into Typesense asynchronously. The frontend (your website, portal, or external app) then queries Typesense directly, getting sub-50ms results without touching the Odoo database at all for search operations.
Installation and Setup
Run a Typesense instance
The fastest path is Docker. One command gives you a running Typesense server with persistent storage:
docker run -d \ --name typesense \ -p 8108:8108 \ -v /path/to/data:/data \ typesense/typesense:latest \ --data-dir /data \ --api-key=your-api-key \ --enable-cors # Verify it's running: curl http://localhost:8108/health # → {"ok":true}
Install the OCA modules
You need both the base framework and the Typesense backend. Add these to your Odoo addons:
./src/search-engine: remotes: origin: https://github.com/OCA/search-engine.git target: origin 18.0 merges: - origin 18.0 # Modules needed: # - connector_search_engine (base framework) # - connector_typesense (Typesense backend)
Configure the backend in Odoo
Go to Search Engine → Configuration → Backends and create a new Typesense backend with your connection details.
Host: localhost # or your Typesense server IP Port: 8108 Protocol: http # or https in production API Key: your-api-key # set when starting Typesense
Define your indexes and bind records
Use the Search Engine configuration to define which Odoo model maps to which Typesense collection, and which fields to export. The Typesense Dashboard (an open-source UI tool) makes it easy to inspect and manage your collections visually.
The OCA team recommends using typesense-dashboard for managing your Typesense server — it gives you a clean UI for browsing collections, testing queries, and configuring index mappings without writing API calls manually.
What Gets Indexed — A Practical Example
The module is designed to export any Odoo model to a Typesense collection. The most common use case is product search, but the framework is generic. Here's a simplified view of what a product index definition looks like:
# Defined via connector_search_engine binding + serializer # Maps Odoo product.template fields → Typesense document schema { "name": "odoo_products", "fields": [ {"name": "name", "type": "string"}, {"name": "description", "type": "string"}, {"name": "categ_id", "type": "string", "facet": True}, {"name": "list_price", "type": "float", "facet": True}, {"name": "active", "type": "bool"}, {"name": "website_url", "type": "string"}, ], "default_sorting_field": "list_price" } # Result: any search hits this index, not PostgreSQL # Typo tolerance, faceted filters, and ranking — automatic
Once a record is bound, the synchronization layer watches for changes in Odoo and keeps the Typesense index up to date. Creates, writes, and deletes in Odoo propagate to the search index — so the data stays fresh without manual re-indexing.
Why This Matters for Odoo E-commerce
Odoo's website module uses PostgreSQL for product search. That works, but it has real limitations that become painful at scale:
- Typos produce no results — "iphone charger" won't find "iPhone charger"
- No relevance ranking — all text matches are treated equally
- No instant-as-you-type — each keystroke hits the database
- No faceted filtering without custom SQL — category, price range, attributes
- Performance degrades as the catalog grows
With connector_typesense, all of these are solved at the architecture level — the search engine handles it, and Odoo stays focused on business logic and order management.
One thing to plan for: Typesense keeps its index in RAM. For a typical Odoo product catalog (up to ~500k products with metadata), a server with 4–8 GB RAM is comfortable. Plan your infrastructure before going to production.
KobrosTech contribution
Mohamed Alkobrosli (KobrosTech) is listed as a contributor to connector_typesense in the OCA credits. The module was built by Kencove and Derico and is actively maintained under OCA's search-engine repository, available for Odoo 16.0 and 18.0.
Add Real Search to Your Odoo
Whether you're building a product catalog, a customer portal, or any searchable interface on top of Odoo — connector_typesense is the right foundation.
Fast, Typo-Tolerant Search in Odoo
with Typesense
How the OCA connector_typesense module connects your Odoo data to a modern, sub-50ms search engine — and why it matters for e-commerce and ERP teams.
Odoo's built-in search is functional — but it's database search. Full-text queries hit PostgreSQL, there's no typo tolerance, no instant-as-you-type results, and no relevance ranking. For product catalogs, knowledge bases, or any customer-facing search bar, that's a real limitation. This is what connector_typesense solves.
What Is Typesense?
Typesense is an open-source search engine built in C++, designed specifically for the use cases where Elasticsearch is overkill and Algolia is too expensive. The key characteristics that make it relevant for Odoo projects:
| Feature | PostgreSQL FTS | Elasticsearch | Typesense |
|---|---|---|---|
| Response time | 100–500ms+ | 50–200ms | < 50ms (RAM index) |
| Typo tolerance | No | Config required | Built-in, on by default |
| Setup complexity | N/A (in Odoo) | High — JVM, cluster tuning | Single binary or Docker |
| Vector / semantic search | Via pgvector | Yes | Yes, with auto-embedding |
| Faceted filtering | Manual SQL | Yes | Yes, built-in |
| Self-hostable, free | Yes | Yes (complex) | Yes, single container |
The core tradeoff with Typesense: it keeps its entire index in RAM, which is what makes it so fast — but it means your server needs enough memory to hold your searchable data. For most Odoo product catalogs (tens of thousands of products), this is not a problem. For datasets in the hundreds of millions, you'd look elsewhere.
Typesense also supports built-in clustering via Raft consensus for high availability — something you'd normally need an enterprise license for in competing engines. The open-source version includes it.
How connector_typesense Works
The module sits inside the OCA search-engine framework — a generic connector layer that handles the binding, synchronization, and export logic between Odoo records and external search indexes. connector_typesense is the Typesense-specific backend for this framework.
The important design decision here: Odoo does not serve search queries directly. Records are indexed into Typesense asynchronously. The frontend (your website, portal, or external app) then queries Typesense directly, getting sub-50ms results without touching the Odoo database at all for search operations.
Installation and Setup
Run a Typesense instance
The fastest path is Docker. One command gives you a running Typesense server with persistent storage:
docker run -d \ --name typesense \ -p 8108:8108 \ -v /path/to/data:/data \ typesense/typesense:latest \ --data-dir /data \ --api-key=your-api-key \ --enable-cors # Verify it's running: curl http://localhost:8108/health # → {"ok":true}
Install the OCA modules
You need both the base framework and the Typesense backend. Add these to your Odoo addons:
./src/search-engine: remotes: origin: https://github.com/OCA/search-engine.git target: origin 18.0 merges: - origin 18.0 # Modules needed: # - connector_search_engine (base framework) # - connector_typesense (Typesense backend)
Configure the backend in Odoo
Go to Search Engine → Configuration → Backends and create a new Typesense backend with your connection details.
Host: localhost # or your Typesense server IP Port: 8108 Protocol: http # or https in production API Key: your-api-key # set when starting Typesense
Define your indexes and bind records
Use the Search Engine configuration to define which Odoo model maps to which Typesense collection, and which fields to export. The Typesense Dashboard (an open-source UI tool) makes it easy to inspect and manage your collections visually.
The OCA team recommends using typesense-dashboard for managing your Typesense server — it gives you a clean UI for browsing collections, testing queries, and configuring index mappings without writing API calls manually.
What Gets Indexed — A Practical Example
The module is designed to export any Odoo model to a Typesense collection. The most common use case is product search, but the framework is generic. Here's a simplified view of what a product index definition looks like:
# Defined via connector_search_engine binding + serializer # Maps Odoo product.template fields → Typesense document schema { "name": "odoo_products", "fields": [ {"name": "name", "type": "string"}, {"name": "description", "type": "string"}, {"name": "categ_id", "type": "string", "facet": True}, {"name": "list_price", "type": "float", "facet": True}, {"name": "active", "type": "bool"}, {"name": "website_url", "type": "string"}, ], "default_sorting_field": "list_price" } # Result: any search hits this index, not PostgreSQL # Typo tolerance, faceted filters, and ranking — automatic
Once a record is bound, the synchronization layer watches for changes in Odoo and keeps the Typesense index up to date. Creates, writes, and deletes in Odoo propagate to the search index — so the data stays fresh without manual re-indexing.
Why This Matters for Odoo E-commerce
Odoo's website module uses PostgreSQL for product search. That works, but it has real limitations that become painful at scale:
- Typos produce no results — "iphone charger" won't find "iPhone charger"
- No relevance ranking — all text matches are treated equally
- No instant-as-you-type — each keystroke hits the database
- No faceted filtering without custom SQL — category, price range, attributes
- Performance degrades as the catalog grows
With connector_typesense, all of these are solved at the architecture level — the search engine handles it, and Odoo stays focused on business logic and order management.
One thing to plan for: Typesense keeps its index in RAM. For a typical Odoo product catalog (up to ~500k products with metadata), a server with 4–8 GB RAM is comfortable. Plan your infrastructure before going to production.
KobrosTech contribution
Mohamed Alkobrosli (KobrosTech) is listed as a contributor to connector_typesense in the OCA credits. The module was built by Kencove and Derico and is actively maintained under OCA's search-engine repository, available for Odoo 16.0 and 18.0.
Add Real Search to Your Odoo
Whether you're building a product catalog, a customer portal, or any searchable interface on top of Odoo — connector_typesense is the right foundation.