User guide
KI Elasticsearch for Odoo: Smart Search Setup and User Guide
How to install, configure and use KI Elasticsearch for Odoo 19.0 and 20.0: website shop autocomplete, fast backend Many2one search, index sync, analytics and automatic fallback to native search.
KalvyAI Engineering · · 7 min read

KI Elasticsearch (technical name ki_elasticsearch) connects your Odoo database to an Elasticsearch cluster. It powers search in two places: the search bar on your website shop and Many2one fields on backend forms such as sales orders and invoices.
This guide covers what the app does, who it is for, installation, setup, each main feature, tips, limitations and common questions.
You can buy and download the app from the store page: KI Elasticsearch on the KalvyAI Store.
What the app is for
KI Elasticsearch puts Odoo search on top of an Elasticsearch cluster, either self-hosted or on Elastic Cloud. One cluster connection serves both the website shop and the backend.
- On the website shop, customers get instant product suggestions as they type. The dropdown shows thumbnails, prices, their recent searches and trending keyword tags. Clicking a suggestion goes straight to the product.
- In the backend, Many2one lookups for products, customers and invoices are served from Elasticsearch, with dynamic domain filtering and access rules applied.
Results are typo-tolerant. If the cluster becomes unreachable, the module falls back to native Odoo search so users are not blocked.
Who it helps
- Shop owners with large catalogs who want shoppers to find products quickly from the search bar.
- Sales reps who pick products and customers on sales orders many times a day.
- Accountants who look up customers and invoices in big databases.
- ERP admins and developers who want search analytics and control over how and when data is indexed.
Requirements
Before you start, check that you have:
- Odoo 19.0 or 20.0 (Community, Enterprise or Odoo.sh)
- An Elasticsearch 7.x or 8.x cluster, an Elastic Cloud deployment, or an OpenSearch instance
- The Python
elasticsearchlibrary installed in the same environment Odoo runs in - These standard Odoo modules: Website Sale (
website_sale), Sales (sale), Invoicing (account) and Product (product) - Network connectivity from your Odoo server to the Elasticsearch cluster
Odoo Online (SaaS) is not supported, because it does not allow custom modules. Use Odoo.sh or a self-hosted server.
Installation
1. Get the module
- Go to the store page and purchase the app.
- Download the module package for your Odoo version (19.0 or 20.0).
2. Install the Python library
On a self-hosted server, install the library into the Python environment that runs Odoo:
pip install elasticsearchIf Odoo runs in a virtualenv, activate it first. The client library version should match your cluster's major version: [CHECK: recommended elasticsearch Python library version for 7.x vs 8.x clusters].
On Odoo.sh, add the library to the requirements.txt file at the root of your repository:
elasticsearch3. Install the module in Odoo
- Copy the
ki_elasticsearchfolder into a directory on your Odoo addons path (on Odoo.sh, commit it to your repository). - Restart the Odoo service.
- Activate developer mode, open the Apps menu and click Update Apps List.
- Search for
ki_elasticsearchand click Activate.
Odoo installs the required dependencies (Website Sale, Sales, Invoicing, Product) automatically if they are not already installed.
Setup
1. Configure the Elasticsearch connection
- Open the Elasticsearch Settings menu: [CHECK: full menu path for Elasticsearch Settings].
- Enter your host URL. For Elastic Cloud, use the endpoint shown in your deployment.
- Enter the port.
- Enter your authentication credentials. [CHECK: supported authentication types, e.g. username/password and/or API key].
- Save.
This single connection is used by both the website shop and backend search. You do not configure them separately.
2. Test the connection
- Click Test Connection.
- The module checks cluster health and reports the result. [CHECK: exact success and error messages shown].
- If the test fails, check the host, port, credentials and that your Odoo server can reach the cluster through any firewall.
3. Run the initial sync
- Open the initial sync wizard: [CHECK: location of the initial sync wizard].
- Run it to populate your product indexes. [CHECK: which models the wizard indexes, e.g. products, customers, invoices].
- Wait for it to finish before enabling search for users. Large catalogs take longer.
4. Enable frontend and backend search
- Website shop: enable autocomplete on the shop search bar. [CHECK: setting name and location for enabling website autocomplete].
- Backend: assign the Elasticsearch Many2one widget to the views where you want it. See the backend section below.
Using each feature
Website smart search
Once autocomplete is enabled:
- A shopper starts typing in the shop search bar.
- A dropdown appears with matching products, each with a thumbnail and price.
- Small typos still return relevant results.
- Clicking a suggestion opens that product page directly.
Try it yourself in a private browser window as a logged-out visitor to see what customers see.
Trending and recent searches
The dropdown also shows:
- Recent searches, so a returning shopper can repeat a search with one click.
- Trending keyword tags, highlighting popular searches across your shop.
[CHECK: how trending tags are calculated and whether they can be configured or curated].
Backend Many2one search widget
The widget replaces the standard lookup on a Many2one field with an Elasticsearch-powered one. It is intended for fields like customers and products on sales orders, customers on invoices, and inventory lookups.
To assign it, [CHECK: whether the module offers a UI option to assign the widget, or only XML view inheritance]. With XML, you inherit the view and set the field's widget attribute. Example for the customer field on the sales order form:
<record id="view_order_form_es_partner" model="ir.ui.view">
<field name="name">sale.order.form.es.partner</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="attributes">
<attribute name="widget">[CHECK: widget technical name]</attribute>
</xpath>
</field>
</record>Put this in a small custom module that depends on ki_elasticsearch, then upgrade it. After that:
- Open a sales order and click the Customer field.
- Start typing a name. Results come from Elasticsearch.
- Any domain set on the field still applies, so users only see valid choices.
Dynamic domain and access filtering
The module enforces security group access rules and dynamic domain filters on search results. A user who cannot see a record in standard Odoo should not see it in Elasticsearch results either.
After setup, test this with a restricted user account, for example a salesperson who can only see their own customers, to confirm results match your rules.
Search analytics and query logging
Customer and internal queries are logged to Elasticsearch. Use this to find:
- The most searched items
- Demand patterns over time
- Searches that return nothing useful, which can point to missing products or poor product names
[CHECK: where analytics are viewed, inside Odoo or via Kibana/Elasticsearch tools, and whether logging can be turned off].
Real-time and cron index sync
The module supports two ways to keep indexes current:
- Real-time: records are indexed when they are created or written.
- Cron: a scheduled background job synchronizes records.
[CHECK: how to choose between real-time and cron sync, and the default cron interval]. The scheduled job can be reviewed under Settings > Technical > Automation > Scheduled Actions in developer mode. [CHECK: name of the scheduled action].
Automated fallback to native search
If the cluster is down or unreachable, searches fall back to native Odoo ORM search. Users keep working; search is simply as fast as standard Odoo while the cluster is unavailable. No action is needed to switch over.
Tips
- Test on staging first. Run the initial sync and try both shop and backend search on a copy of your database before going live.
- Check network access early. Most connection failures come from firewalls or wrong ports between Odoo and the cluster.
- Re-check results after bulk imports. If you import many products at once, confirm they appear in search, and rerun the sync if needed.
- Start with a few backend fields. Assign the widget to the busiest fields first (customer and product on sales orders), then expand.
- Review analytics regularly. Top searches and empty searches are useful input for catalog and naming decisions.
- Test with restricted users. Confirm access rules behave as expected for each role.
Limitations
- Odoo Online (SaaS) is not supported. You need Odoo.sh or a self-hosted server.
- Odoo and the Elasticsearch cluster must be able to reach each other over the network.
- Hosting, scaling, backups and maintenance of the Elasticsearch cluster are handled by your team or your cloud provider, not by the module.
- Only Odoo 19.0 and 20.0 are supported.
FAQ
Which Elasticsearch versions are supported?
Elasticsearch 7.x and 8.x, OpenSearch, and Elastic Cloud managed clusters.
Does this work on both Odoo Community and Enterprise?
Yes. It works on Community, Enterprise and Odoo.sh deployments.
Does it work on Odoo Online?
No. Odoo Online does not allow custom modules. Use Odoo.sh or a self-hosted server.
What happens if the Elasticsearch cluster is temporarily unreachable?
Searches automatically fall back to native Odoo ORM search, without crashing or blocking users.
Can I search backend records like invoices and customers?
Yes. The module provides an Elasticsearch-powered Many2one widget for backend record search, in addition to website shop search.
Do I need to host Elasticsearch myself?
You need a cluster, but it can be self-hosted or a managed service such as Elastic Cloud. The module does not include hosting.
Do the website and backend need separate clusters?
No. One connection configuration serves both.
How KalvyAI can help
We build and connect Odoo, ERPNext and Shopify systems, and we work with search setups like this one regularly. If you want help installing KI Elasticsearch, connecting it to your cluster, assigning the backend widget across your views, or testing access rules before go-live, contact us. You can get the app itself from the KalvyAI Store.
- User guide
- Odoo
- Elasticsearch
- eCommerce Search
- Odoo 19
- Odoo Apps
- User Guide
KalvyAI Engineering · Engineering team
The engineers who build, connect and fix business systems at KalvyAI: Odoo, ERPNext, Shopify and AI agents that work inside them with approvals, budgets and an audit trail.



Comments
No comments yet. Questions and corrections are welcome.
Rate this post or leave a comment