Base module for connecting Odoo with external search engines. This addon is intended to be used as a base for other addons that implement specific search engines. It's designed to be easily extensible and modular.
auto_awesome What this module does
AI-generated from the code · Odoo 18.0Connect Odoo to external search engines by defining backends, indexes and per-record bindings, then recompute, export and delete index data in the background. It is a base framework: the actual search engine connection is provided by other addons.
This module adds a Search Engine area to Odoo where you configure connections to external search engines and manage which Odoo records are indexed.
- Under Search Engine > Configuration > Backends you create a backend (name, technical name, index prefix, type) and use the Test Connection button to verify the setup.
- Under Search Engine > Indexes you create indexes linked to a backend, an Odoo model, an optional language and an index configuration, with batch sizes for exporting and recomputing.
- On an index you get buttons to recompute and export all bindings, export all bindings, export settings, clear the index and reindex (some restricted to the manager group).
- Under Search Engine > Bindings you see one line per record/index pair with its state, dates, error and JSON data; you can force a recompute or a force export from the form.
Automatic behaviour: bindings move through states (to recompute, recomputing, to export, exporting, done, invalid data, fail to recompute, to delete, deleting). A record can only be bound once per index, and the binding model must match the index model. Recompute and export run as background jobs in batches, and three scheduled actions generate the jobs for recomputing and exporting per index. Records using the indexable mixin get a smart button showing how many bindings are done, pending or in error. Deleting a record or archiving it marks its bindings to be deleted from the index.
Depends on
Required by other modules
Menus it adds
Models and fields (7)
- se.index · new modelname, color (Color Index), lang_id (Lang), model_id (Model), config_id (Config), count_all, backend_id (Backend), count_done, binding_ids, count_error, count_pending, serializer_type, custom_tech_name, batch_exporting_size, batch_recomputing_size
- se.backend · new modelname, index_ids, binding_ids, backend_type (Type), binding_count, index_prefix_name
- se.binding · new modeldata, error, state, res_id (Record ID), index_id (Index), record_id, res_model, backend_id (Search Engine Backend), data_display, date_recomputed, date_synchronized
- se.index.config · new modelname, body_str
- ir.actions.actions · extends an existing model
- se.indexable.record · new modelse_binding_ids (Seacrh Engine Bindings), count_se_binding_done, count_se_binding_error, count_se_binding_total, count_se_binding_pending
- se.binding.state.updater · new modelstate (New state)
Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 6 confirmed, 3 with no information of 9 versions.
Sources · Odoo 15.0
Confirmed on 2026-11-03 in branch 15.0 of OCA/search-engine.
terminal Installation and usage
OCA documentation · Odoo 18.0Installation
Source · Odoo 18.0This addon uses the native json python package provided by python. When a json for a record is recomputed, the new value is compared to the original one to see if an export to the search engine index is needed. This is done by comparing the md5 of the two json strings. This process when done on a large number of records can be slow when the json is large and complex. To speed up this process you can install the orjson package.
pip install orjsonUsage
Source · Odoo 18.0Overview
A search engine is a system designed to store information in a way that makes it easy to find through search and analytics queries. The main difference between a search engine and a database is that a search engine is optimized for search and analytics queries, while a database is optimized for transactional and relational queries.
This addons is designed around 4 main concepts:
- The search engine backend is used to define into Odoo the kind of search engine that will be used to index the data. It's main responsibility is to provide an instance of odoo.addons.search_engine.tools.adapter.SearchEngineAdapter that will be used to communicate with the search engine.
- The search engine index is used to define into Odoo the index where the data will be indexed. An index is always linked to a search engine backend. The index provides methods to use to manage the lifecycle of the data put into the index for the records of a given model. To do so, it uses:
- The SearchEngineAdapter provided by the backend to communicate with the search engine.
- A ModelSerializer that is used to transform an odoo record into a dictionary that can be indexed into the search engine.
- A JsonValidator that is used to validate the data that is to be indexed into the search engine. The RecordSerializer and IndexDataValidator are defined on the index itself. The current addon provides a default implementation only for the IndexDataValidator. You can find into the github repository search-engine An implementation of the RecordSerializer based on the jsonifier addon connector_search_engine_jsonifier.
- The search engine indexable record is a mixin that is used to define the records that can be indexed into a search engine index. The mixin provides methods:
- To add a record to an index.
- To remove a record from an index.
- To mark the record into an index (the search engine bindings) as to be recomputed (This method should be called when modifications are made on the record that could impact the data that are indexed into the search engine. It will instruct the index that the record must be recomputed and re-indexed). It also ensures that when the record is unlinked, it is removed from the indexes it was indexed into.
- The search engine binding is a model that represents the link between an index and an indexable odoo record. It give you access to the data that are indexed into the search engine for the record. It's also used to manage the lifecycle of the data into the search engine. When a binding is created, it's marked as to be computed. Once the data are computed, the binding is marked as to be indexed. Once the data are indexed, the binding is marked as indexed. If the linked record is unlinked, the binding is marked as to be removed. Once the data are removed from the search engine, the binding is deleted.
Indexing lifecycle
The indexing lifecycle is based on the following steps:
- When a record is added to an index, a binding is created and marked as to be computed.
- A cron job scheduled every 5 minutes will look for bindings that are to be computed and for each of them will schedule a job to re compute the json data.
- When the json data is computed, the binding is marked as to be exported if the json is valid and is different from the one that has been computed last time.
- A cron job scheduled every 5 minutes will ensure the syncing with the search engine. It will:
- look for bindings that are to be exported and for each of them will schedule a job to export the json data into the search engine. Once exported, the binding is marked as 'done'.
- look for bindings that are to be removed and for each of them will schedule a job to remove the data from the search engine. Once removed, the binding is deleted.
To keep in sync the data from your model instance and the data that are indexed into the search engine, you should call the method _se_mark_to_update on the mode instance when you make modifications that could impact the data that are indexed into the search engine.
- When the method _se_mark_to_update is called, the binding is marked as to be computed.
- From there, the same process as described above will be used to recompute the data and reindex them into the search engine.
When a model instance is unlinked, the binding is marked as to be removed. From there if will be processed by the job syncing the data with the search engine.
> [!NOTE] > In previous versions of this addon, there was no method to mark a > record as to be recomputed. As a consequence, all the records were > re-computed every day to ensure that the data in the search engine > were up to date. This was a performance issue and consumed a lot of > resources. If despite this, you want to recompute all the records > every day, you can activate the cron jon Search engine: recompute all > index and deactivate the one named earch engine: Generate job for > recompute binding to recompute per index.
No verified information in OCA: Configuration.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.