Connector Search Engine

connector_search_engine
REPOSITORY
REPOSITORYOCA/search-engine
GIT
GIThttps://github.com/OCA/search-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/search-engine/tree/18.0/connector_search_engine
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYGeneric Modules
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
COMMITTERS
COMMITTERSGitHub, Laurent Mignon (ACSONE), Denis Roussel, Ivàn Todorovich, sbejaoui, Thomas Binsfeld, Sébastien BEAU, Florian da Costa, beau sebastien, David Beal, oca-travis, Weblate, OCA-git-bot, Simone Orsi, hparfr, Mourad EL HADJ MIMOUNE, François Honoré, clementmbr, Benjamin Willig, Quentin Groulard, oca-ci, Héctor Villarreal Ortega, kobros-tech, Laurent-Corron, Florian Mounier, chafique.delli, Benoît, Arnaud LAYEC
WEBSITE
WEBSITEhttps://github.com/OCA/search-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/queue:
    - queue_job
OCA/server-env:
    - server_environment
OCA/server-tools:
    - base_partition
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES typing-extensions
unidecode
requests
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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.

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
se_backend_form_view se.backend form New
se_backend_tree_view se.backend.tree (in connector_search_engine) se.backend list New
se_binding_state_updater_form_view se.binding.state.updater.form (in connector_search_engine) se.binding.state.updater form New
se_binding_view_form se.binding form New
se_binding_view_search se.binding search New
se_binding_view_tree se.binding list New
se_index_config_form_view se.index.config.form (in connector_search_engine) se.index.config form New
se_index_config_tree_view se.index.config.tree (in connector_search_engine) se.index.config list New
se_index_form_view se.index.form se.index form New
se_index_kanban_view se.index kanban New
se_index_search_view se.index search New
se_index_tree_view se.index list New
Models touched (7)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • backend_type Selection
    required=True selection=[] string='Type'
  • binding_count Integer
    compute='_compute_binding_count'
  • binding_ids One2many → se.binding
    args: 'se.binding', 'backend_id'
  • index_ids One2many → se.index
    args: 'se.index', 'backend_id'
  • index_prefix_name Char
    help='Prefix for technical indexes tech name. You could use this to change index names based on current env.'
  • name Char
    required=True
Public methods (3)
  • action_open_bindings(self)
  • action_test_connection(self)
  • get_adapter(self, index=None) -> SearchEngineAdapter
    Return an instance of the adapter for this backend

New fields (11)
  • backend_id Many2one → se.backend
    readonly=True related='index_id.backend_id' store=True string='Search Engine Backend' args: 'se.backend'
  • data Json
    prefetch=False readonly=True
  • data_display Text
    compute='_compute_data_display' help='Include this in debug mode to be able to inspect index data.'
  • date_recomputed Datetime
    readonly=True
  • date_synchronized Datetime
    readonly=True
  • error Text
  • index_id Many2one → se.index
    ondelete='cascade' readonly=True required=True string='Index' args: 'se.index'
  • record_id Reference
    compute='_compute_record_id' readonly=True selection=<expr>
  • res_id Integer
    help='ID of the target record in the database' readonly=True string='Record ID'
  • res_model Selection
    readonly=True selection=<expr>
  • state Selection
    default='to_recompute' readonly=True args: [('to_recompute', 'To recompute'), ('recomputing', 'Recomputing'), ('to_export', 'To export'), ('exporting', 'Exporting'), ('done', 'Done'), ('invalid_data', 'Invalid Data'), ('recompute_error', 'Fail to Recompute'), ('to_delete', 'To Delete'), ('deleting', 'Deleting')]
Public methods (10)
  • create(self, vals_list) -> Self
    @api.model_create_multi
    Create a binding and compute its JSON.
  • delete_record(self) -> str
  • export_record(self) -> str
  • get_export_data(self) -> <expr>
    Public method to retrieve export data.
  • jobify_recompute_json(self, force_export: bool=False)
    Create batch job for records to recompute the json.
  • recompute_from_owner(self)
  • recompute_json(self, force_export: bool=False)
    "Compute index record data as JSON.
  • record(self) -> models.Model
    @property
  • unlink(self)
  • write(self, vals) -> bool
    Write a binding and compute its JSON.

New fields (1)
  • state Selection
    required=True selection=<expr> string='New state'
Public methods (1)
  • doit(self)

New fields (15)
  • backend_id Many2one → se.backend
    ondelete='cascade' required=True string='Backend' args: 'se.backend'
  • batch_exporting_size Integer
    default=1000 help='Batch size for exporting element'
  • batch_recomputing_size Integer
    default=50 help='Batch size for recomputing element'
  • binding_ids One2many → se.binding
    args: 'se.binding', 'index_id', 'Binding'
  • color Integer
    compute='_compute_count_binding' string='Color Index'
  • config_id Many2one → se.index.config
    comodel_name='se.index.config' help='Index configuration record' string='Config'
  • count_all Integer
    compute='_compute_count_binding'
  • count_done Integer
    compute='_compute_count_binding'
  • count_error Integer
    compute='_compute_count_binding'
  • count_pending Integer
    compute='_compute_count_binding'
  • custom_tech_name Char
    help="Take control of index technical name. The final index name is still computed and contains in any case: backend index name prefix and language if given. If no custom name is provided, model's normalized name will be used."
  • lang_id Many2one → res.lang
    required=False string='Lang' args: 'res.lang'
  • model_id Many2one → ir.model
    domain=<expr> ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
    compute='_compute_name' store=True
  • serializer_type Selection
    args: []
Public methods (19)
  • action_open_bindings(self)
  • batch_recompute(self, force_export: bool=False) -> None
    Recompute all the bindings of the index marked as to_recompute.
  • batch_sync(self, force_export: bool=False) -> None
  • clear_index(self) -> None
  • delete_obsolete_item(self, item_ids: <expr>)
  • export_all_settings(self) -> None
    @api.model
  • export_settings(self) -> None
  • force_batch_sync(self) -> None
  • generate_batch_recompute_per_index(self, domain: <expr>=None) -> None
    @api.model
    Generate a job for each index to recompute. This method is usually called by a cron. It will generate a job for each index to recompute. The recompute process will recompute the bindings marked as to_recompute.
  • generate_batch_sync_per_index(self, domain: <expr>=None) -> None
    @api.model
    Generate a job for each index to sync. This method is usually called by a cron. It will generate a job for each index to sync. The sync will export the bindings marked as to_export. and will delete the bindings marked as to_delete.
  • json_validator(self) -> JsonValidator
    @property
  • model_serializer(self) -> ModelSerializer
    @property
  • recompute_all_binding(self, force_export: bool=False)
  • recompute_all_index(self, domain=None) -> None
    @api.model
  • recompute_and_export_all_binding(self) -> None
  • reindex(self) -> None
    Reindex records according.
  • resynchronize_all_bindings(self)
    Force sync between Odoo records and index records. This method will iter on all item in the index of the search engine if the corresponding binding do not exist on odoo it will create a job that delete all this obsolete items. You should not use this method for day to day job, it's only an helper for recovering your index after corruption. You can also drop index but this will introduce downtime, so it's better to force a resynchronization
  • se_adapter(self) -> SearchEngineAdapter
    @property
  • write(self, vals)

New fields (2)
  • body_str Text
    compute='_compute_body_str' default='{}' inverse='_inverse_body_str' tracking=True
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (5)
  • count_se_binding_done Integer
    compute='_compute_count_binding'
  • count_se_binding_error Integer
    compute='_compute_count_binding'
  • count_se_binding_pending Integer
    compute='_compute_count_binding'
  • count_se_binding_total Integer
    compute='_compute_count_binding'
  • se_binding_ids One2many → se.binding
    comodel_name='se.binding' compute='_compute_binding_ids' compute_sudo=True string='Seacrh Engine Bindings'
Public methods (3)
  • open_se_binding(self)
  • unlink(self)
  • write(self, vals)
REPOSITORY
REPOSITORYOCA/search-engine
GIT
GIThttps://github.com/OCA/search-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/search-engine/tree/16.0/connector_search_engine
VERSION
VERSION 1.1.2
CATEGORY
CATEGORYGeneric Modules
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
COMMITTERS
COMMITTERSGitHub, Laurent Mignon (ACSONE), Denis Roussel, Ivàn Todorovich, sbejaoui, Thomas Binsfeld, Sébastien BEAU, Florian da Costa, beau sebastien, David Beal, oca-travis, Weblate, OCA-git-bot, Simone Orsi, hparfr, Mourad EL HADJ MIMOUNE, François Honoré, clementmbr, Benjamin Willig, Quentin Groulard, oca-ci, Héctor Villarreal Ortega, kobros-tech, cyrilmanuel, Laurent-Corron, Florian Mounier, chafique.delli
WEBSITE
WEBSITEhttps://github.com/OCA/search-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:54:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/queue:
    - queue_job
OCA/server-env:
    - server_environment
OCA/server-tools:
    - base_partition
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES typing-extensions
unidecode
requests
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
se_backend_form_view se.backend form New
se_backend_tree_view se.backend.tree (in connector_search_engine) se.backend tree New
se_binding_state_updater_form_view se.binding.state.updater.form (in connector_search_engine) se.binding.state.updater form New
se_binding_view_form se.binding form New
se_binding_view_search se.binding search New
se_binding_view_tree se.binding tree New
se_index_config_form_view se.index.config.form (in connector_search_engine) se.index.config form New
se_index_config_tree_view se.index.config.tree (in connector_search_engine) se.index.config tree New
se_index_form_view se.index.form se.index form New
se_index_kanban_view se.index kanban New
se_index_search_view se.index search New
se_index_tree_view se.index tree New
Models touched (7)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • backend_type Selection
    required=True selection=[] string='Type'
  • binding_count Integer
    compute='_compute_binding_count'
  • binding_ids One2many → se.binding
    args: 'se.binding', 'backend_id'
  • index_ids One2many → se.index
    args: 'se.index', 'backend_id'
  • index_prefix_name Char
    help='Prefix for technical indexes tech name. You could use this to change index names based on current env.'
  • name Char
    required=True
Public methods (3)
  • action_open_bindings(self)
  • action_test_connection(self)
  • get_adapter(self, index=None) -> SearchEngineAdapter
    Return an instance of the adapter for this backend

New fields (11)
  • backend_id Many2one → se.backend
    readonly=True related='index_id.backend_id' store=True string='Search Engine Backend' args: 'se.backend'
  • data Json
    prefetch=False readonly=True
  • data_display Text
    compute='_compute_data_display' help='Include this in debug mode to be able to inspect index data.'
  • date_recomputed Datetime
    readonly=True
  • date_synchronized Datetime
    readonly=True
  • error Text
  • index_id Many2one → se.index
    ondelete='cascade' readonly=True required=True string='Index' args: 'se.index'
  • record_id Reference
    compute='_compute_record_id' readonly=True selection=<expr>
  • res_id Integer
    help='ID of the target record in the database' readonly=True string='Record ID'
  • res_model Selection
    readonly=True selection=<expr>
  • state Selection
    default='to_recompute' readonly=True args: [('to_recompute', 'To recompute'), ('recomputing', 'Recomputing'), ('to_export', 'To export'), ('exporting', 'Exporting'), ('done', 'Done'), ('invalid_data', 'Invalid Data'), ('recompute_error', 'Fail to Recompute'), ('to_delete', 'To Delete'), ('deleting', 'Deleting')]
Public methods (10)
  • create(self, vals_list) -> Self
    @api.model_create_multi
    Create a binding and compute its JSON.
  • delete_record(self) -> str
  • export_record(self) -> str
  • get_export_data(self) -> <expr>
    Public method to retrieve export data.
  • jobify_recompute_json(self, force_export: bool=False)
    Create batch job for records to recompute the json.
  • recompute_from_owner(self)
  • recompute_json(self, force_export: bool=False)
    "Compute index record data as JSON.
  • record(self) -> models.Model
    @property
  • unlink(self)
  • write(self, vals) -> bool
    Write a binding and compute its JSON.

New fields (2)
  • do_it_now Boolean
    help="Don't wait for the cron to process these records"
  • state Selection
    required=True selection=<expr> string='New state'
Public methods (1)
  • doit(self)

New fields (15)
  • backend_id Many2one → se.backend
    ondelete='cascade' required=True string='Backend' args: 'se.backend'
  • batch_exporting_size Integer
    default=1000 help='Batch size for exporting element'
  • batch_recomputing_size Integer
    default=50 help='Batch size for recomputing element'
  • binding_ids One2many → se.binding
    args: 'se.binding', 'index_id', 'Binding'
  • color Integer
    compute='_compute_count_binding' string='Color Index'
  • config_id Many2one → se.index.config
    comodel_name='se.index.config' help='Index configuration record' string='Config'
  • count_all Integer
    compute='_compute_count_binding'
  • count_done Integer
    compute='_compute_count_binding'
  • count_error Integer
    compute='_compute_count_binding'
  • count_pending Integer
    compute='_compute_count_binding'
  • custom_tech_name Char
    help="Take control of index technical name. The final index name is still computed and contains in any case: backend index name prefix and language if given. If no custom name is provided, model's normalized name will be used."
  • lang_id Many2one → res.lang
    required=False string='Lang' args: 'res.lang'
  • model_id Many2one → ir.model
    domain=<expr> ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
    compute='_compute_name' store=True
  • serializer_type Selection
    args: []
Public methods (19)
  • action_open_bindings(self)
  • batch_recompute(self, force_export: bool=False, binding_ids: <expr>=None) -> None
    Recompute all the bindings of the index marked as to_recompute.
  • batch_sync(self, force_export: bool=False) -> None
  • clear_index(self) -> None
  • delete_obsolete_item(self, item_ids: <expr>)
  • export_all_settings(self) -> None
    @api.model
  • export_settings(self) -> None
  • force_batch_sync(self) -> None
  • force_recompute_all_binding(self) -> None
  • generate_batch_recompute_per_index(self, domain: <expr>=None) -> None
    @api.model
    Generate a job for each index to recompute. This method is usually called by a cron. It will generate a job for each index to recompute. The recompute process will recompute the bindings marked as to_recompute.
  • generate_batch_sync_per_index(self, domain: <expr>=None) -> None
    @api.model
    Generate a job for each index to sync. This method is usually called by a cron. It will generate a job for each index to sync. The sync will export the bindings marked as to_export. and will delete the bindings marked as to_delete.
  • json_validator(self) -> JsonValidator
    @property
  • model_serializer(self) -> ModelSerializer
    @property
  • recompute_all_binding(self, force_export: bool=False)
  • recompute_all_index(self, domain=None) -> None
    @api.model
  • reindex(self) -> None
    Reindex records according.
  • resynchronize_all_bindings(self)
    Force sync between Odoo records and index records. This method will iter on all item in the index of the search engine if the corresponding binding do not exist on odoo it will create a job that delete all this obsolete items. You should not use this method for day to day job, it's only an helper for recovering your index after corruption. You can also drop index but this will introduce downtime, so it's better to force a resynchronization
  • se_adapter(self) -> SearchEngineAdapter
    @property
  • write(self, vals)

New fields (2)
  • body_str Text
    compute='_compute_body_str' default='{}' inverse='_inverse_body_str' tracking=True
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (5)
  • count_se_binding_done Integer
    compute='_compute_count_binding'
  • count_se_binding_error Integer
    compute='_compute_count_binding'
  • count_se_binding_pending Integer
    compute='_compute_count_binding'
  • count_se_binding_total Integer
    compute='_compute_count_binding'
  • se_binding_ids One2many → se.binding
    comodel_name='se.binding' compute='_compute_binding_ids' compute_sudo=True string='Seacrh Engine Bindings'
Public methods (3)
  • open_se_binding(self)
  • unlink(self)
  • write(self, vals)
REPOSITORY
REPOSITORYOCA/search-engine
GIT
GIThttps://github.com/OCA/search-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/search-engine/tree/15.0/connector_search_engine
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYGeneric Modules
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
COMMITTERS
COMMITTERSMiquel Raïch, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/search-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/queue:
    - queue_job
OCA/server-env:
    - server_environment
OCA/server-tools:
    - jsonifier
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
requests
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
se_backend_form_view se.backend.form (in connector_search_engine) se.backend form New
se_backend_tree_view se.backend.tree (in connector_search_engine) se.backend tree New
se_index_config_form_view se.index.config.form (in connector_search_engine) se.index.config form New
se_index_config_tree_view se.index.config.tree (in connector_search_engine) se.index.config tree New
se_index_search_view se.index.search (in connector_search_engine) se.index search New
se_index_tree_no_backend_view se.index.tree with backend hidden (in connector_search_engine) se.index field Inherits connector_search_engine.se_index_tree_view
se_index_tree_view se.index.tree (in connector_search_engine) se.index tree New
Models touched (6)

New fields (5)
  • index_ids One2many → se.index
    args: 'se.index', 'backend_id'
  • index_prefix_name Char
    help='Prefix for technical indexes tech name. You could use this to change index names based on current env.'
  • name Char
    required=True
  • specific_backend Reference
    compute='_compute_specific_backend' readonly=True selection='_select_specific_backend'
  • specific_model Selection
    readonly=True required=True selection='_select_specific_model' string='Type'
Public methods (1)
  • search_engine_name(self)
    @property

New fields (2)
  • index_prefix_name Char
    readonly=False related='se_backend_id.index_prefix_name'
  • se_backend_id Many2one → se.backend
    auto_join=True comodel_name='se.backend' delegate=True index=True ondelete='cascade' required=True
Public methods (2)
  • create(self, vals)
    @api.model
  • unlink(self)

New fields (8)
  • active Boolean
    default=True
  • data Serialized
  • data_display Text
    compute='_compute_data_display' help='Include this in debug mode to be able to inspect index data.'
  • date_modified Datetime
    readonly=True
  • date_syncronized Datetime
    readonly=True
  • index_id Many2one → se.index
    ondelete='cascade' required=True string='Index' args: 'se.index'
  • se_backend_id Many2one → se.backend
    related='index_id.backend_id' string='Search Engine Backend' args: 'se.backend'
  • sync_state Selection
    default='new' readonly=True args: [('new', 'New'), ('to_update', 'To update'), ('scheduled', 'Scheduled'), ('done', 'Done'), ('to_be_checked', 'To be checked')]
Public methods (7)
  • create(self, vals)
    @api.model
  • get_export_data(self)
    Public method to retrieve export data.
  • jobify_recompute_json(self, force_export=False)
  • recompute_json(self, force_export=False)
    Compute index record data as JSON.
  • synchronize(self)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • binding_id Integer
    required=True string='Binding ID'
  • index_id Many2one → se.index
    ondelete='cascade' required=True string='Index' args: 'se.index'
Public methods (1)
  • synchronize(self)

New fields (9)
  • backend_id Many2one → se.backend
    ondelete='cascade' required=True string='Backend' args: 'se.backend'
  • batch_size Integer
    default=5000 help='Batch size for exporting element'
  • binding_todelete_ids One2many → se.binding.todelete
    comodel_name='se.binding.todelete' inverse_name='index_id' readonly=True string='Bindings to delete'
  • config_id Many2one → se.index.config
    comodel_name='se.index.config' help='Index configuration record' string='Config'
  • custom_tech_name Char
    help="Take control of index technical name. The final index name is still computed and contains in any case: backend index name prefix and language if given. If no custom name is provided, model's normalized name will be used."
  • exporter_id Many2one → ir.exports
    string='Exporter' args: 'ir.exports'
  • lang_id Many2one → res.lang
    required=False string='Lang' args: 'res.lang'
  • model_id Many2one → ir.model
    domain=<expr> ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
    compute='_compute_name' store=True
Public methods (12)
  • batch_export(self, force_export=False)
  • clear_index(self)
  • delete_obsolete_item(self, item_ids)
  • export_all_settings(self)
    @api.model
  • export_settings(self)
  • force_batch_export(self)
  • force_recompute_all_binding(self)
  • generate_batch_export_per_index(self, domain=None)
    @api.model
  • onchange_model_id(self)
    @api.onchange('model_id')
  • recompute_all_binding(self, force_export=False, batch_size=500)
  • recompute_all_index(self, domain=None)
    @api.model
  • resynchronize_all_bindings(self)
    Force sync between Odoo records and index records. This method will iter on all item in the index of the search engine if the corresponding binding do not exist on odoo it will create a job that delete all this obsolete items. You should not use this method for day to day job, it only an helper for recovering your index after a dammage. You can also drop index but this will introduce downtime, so it's better to force a resynchronization

New fields (2)
  • body_str Text
    compute='_compute_body_str' default='{}' inverse='_inverse_body_str' tracking=True
  • name Char
    required=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/search-engine
GIT
GIThttps://github.com/OCA/search-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/search-engine/tree/14.0/connector_search_engine
VERSION
VERSION 2.9.0
CATEGORY
CATEGORYGeneric Modules
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
COMMITTERS
COMMITTERSGitHub, Denis Roussel, Ivàn Todorovich, Sébastien BEAU, oca-travis, Weblate, OCA-git-bot, Simone Orsi, hparfr, François Honoré, oca-ci, Héctor Villarreal Ortega, Héctor Vi Or, Florian Mounier, chafique.delli, Mmequignon
WEBSITE
WEBSITEhttps://github.com/OCA/search-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/queue:
    - queue_job
OCA/server-env:
    - server_environment
OCA/server-tools:
    - jsonifier
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
requests
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
se_backend_form_view se.backend.form (in connector_search_engine) se.backend form New
se_backend_tree_view se.backend.tree (in connector_search_engine) se.backend tree New
se_index_config_form_view se.index.config.form (in connector_search_engine) se.index.config form New
se_index_config_tree_view se.index.config.tree (in connector_search_engine) se.index.config tree New
se_index_search_view se.index.search (in connector_search_engine) se.index search New
se_index_tree_no_backend_view se.index.tree with backend hidden (in connector_search_engine) se.index field Inherits connector_search_engine.se_index_tree_view
se_index_tree_view se.index.tree (in connector_search_engine) se.index tree New
Models touched (6)

New fields (5)
  • index_ids One2many → se.index
    args: 'se.index', 'backend_id'
  • index_prefix_name Char
    help='Prefix for technical indexes tech name. You could use this to change index names based on current env.'
  • name Char
    required=True
  • specific_backend Reference
    compute='_compute_specific_backend' readonly=True selection='_select_specific_backend' string='Specific backend'
  • specific_model Selection
    readonly=True required=True selection='_select_specific_model' string='Type'
Public methods (1)
  • search_engine_name(self)
    @property

New fields (2)
  • index_prefix_name Char
    readonly=False related='se_backend_id.index_prefix_name'
  • se_backend_id Many2one → se.backend
    auto_join=True comodel_name='se.backend' delegate=True index=True ondelete='cascade' required=True
Public methods (2)
  • create(self, vals)
    @api.model
  • unlink(self)

New fields (8)
  • active Boolean
    default=True string='Active'
  • data Serialized
  • data_display Text
    compute='_compute_data_display' help='Include this in debug mode to be able to inspect index data.'
  • date_modified Datetime
    readonly=True
  • date_syncronized Datetime
    readonly=True
  • index_id Many2one → se.index
    ondelete='cascade' required=True string='Index' args: 'se.index'
  • se_backend_id Many2one → se.backend
    related='index_id.backend_id' string='Search Engine Backend' args: 'se.backend'
  • sync_state Selection
    default='new' readonly=True args: [('new', 'New'), ('to_update', 'To update'), ('scheduled', 'Scheduled'), ('done', 'Done'), ('to_be_checked', 'To be checked')]
Public methods (7)
  • create(self, vals)
    @api.model
  • get_export_data(self)
    Public method to retrieve export data.
  • jobify_recompute_json(self, force_export=False, batch_size=500)
  • recompute_json(self, force_export=False)
  • synchronize(self)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • binding_id Integer
    required=True string='Binding ID'
  • index_id Many2one → se.index
    ondelete='cascade' required=True string='Index' args: 'se.index'
Public methods (1)
  • synchronize(self)

New fields (9)
  • backend_id Many2one → se.backend
    ondelete='cascade' required=True string='Backend' args: 'se.backend'
  • batch_size Integer
    default=5000 help='Batch size for exporting element'
  • binding_todelete_ids One2many → se.binding.todelete
    comodel_name='se.binding.todelete' inverse_name='index_id' readonly=True string='Bindings to delete'
  • config_id Many2one → se.index.config
    comodel_name='se.index.config' help='Index configuration record' string='Config'
  • custom_tech_name Char
    help="Take control of index technical name. The final index name is still computed and contains in any case: backend index name prefix and language if given. If no custom name is provided, model's normalized name will be used."
  • exporter_id Many2one → ir.exports
    string='Exporter' args: 'ir.exports'
  • lang_id Many2one → res.lang
    required=False string='Lang' args: 'res.lang'
  • model_id Many2one → ir.model
    domain=<expr> ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
    compute='_compute_name' store=True
Public methods (12)
  • batch_export(self, force_export=False)
  • clear_index(self)
  • delete_obsolete_item(self, item_ids)
  • export_all_settings(self)
    @api.model
  • export_settings(self)
  • force_batch_export(self)
  • force_recompute_all_binding(self)
  • generate_batch_export_per_index(self, domain=None)
    @api.model
  • onchange_model_id(self)
    @api.onchange('model_id')
  • recompute_all_binding(self, force_export=False, batch_size=500)
  • recompute_all_index(self, domain=None)
    @api.model
  • resynchronize_all_bindings(self)
    Force sync between Odoo records and index records. This method will iter on all item in the index of the search engine if the corresponding binding do not exist on odoo it will create a job that delete all this obsolete items. You should not use this method for day to day job, it only an helper for recovering your index after a dammage. You can also drop index but this will introduce downtime, so it's better to force a resynchronization

New fields (2)
  • body_str Text
    compute='_compute_body_str' default='{}' inverse='_inverse_body_str' tracking=True
  • name Char
    required=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/search-engine
GIT
GIThttps://github.com/OCA/search-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/search-engine/tree/13.0/connector_search_engine
VERSION
VERSION 2.8.0
CATEGORY
CATEGORYGeneric Modules
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
COMMITTERS
COMMITTERSLaurent Mignon (ACSONE), Denis Roussel, Thomas Binsfeld, Sébastien BEAU, oca-travis, OCA-git-bot, Simone Orsi, Pierrick Brun, Laurent-Corron
WEBSITE
WEBSITEhttps://github.com/OCA/search-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/queue:
    - queue_job
OCA/server-env:
    - server_environment
OCA/server-tools:
    - base_jsonify
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
requests
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
se_backend_form_view se.backend.form (in connector_search_engine) se.backend form New
se_backend_tree_view se.backend.tree (in connector_search_engine) se.backend tree New
se_index_config_form_view se.index.config.form (in connector_search_engine) se.index.config form New
se_index_config_tree_view se.index.config.tree (in connector_search_engine) se.index.config tree New
se_index_search_view se.index.search (in connector_search_engine) se.index search New
se_index_tree_no_backend_view se.index.tree with backend hidden (in connector_search_engine) se.index field Inherits connector_search_engine.se_index_tree_view
se_index_tree_view se.index.tree (in connector_search_engine) se.index tree New
Models touched (5)

New fields (5)
  • index_ids One2many → se.index
    args: 'se.index', 'backend_id'
  • index_prefix_name Char
    help='Prefix for technical indexes tech name. You could use this to change index names based on current env.'
  • name Char
    required=True
  • specific_backend Reference
    compute='_compute_specific_backend' readonly=True selection='_select_specific_backend' string='Specific backend'
  • specific_model Selection
    readonly=True required=True selection='_select_specific_model' string='Type'
Public methods (1)
  • search_engine_name(self)
    @property

New fields (2)
  • index_prefix_name Char
    readonly=False related='se_backend_id.index_prefix_name'
  • se_backend_id Many2one → se.backend
    auto_join=True comodel_name='se.backend' delegate=True index=True ondelete='cascade' required=True
Public methods (2)
  • create(self, vals)
    @api.model
  • unlink(self)

New fields (8)
  • active Boolean
    default=True string='Active'
  • data Serialized
  • data_display Text
    compute='_compute_data_display' help='Include this in debug mode to be able to inspect index data.'
  • date_modified Date
    readonly=True
  • date_syncronized Date
    readonly=True
  • index_id Many2one → se.index
    ondelete='cascade' required=True string='Index' args: 'se.index'
  • se_backend_id Many2one → se.backend
    related='index_id.backend_id' string='Search Engine Backend' args: 'se.backend'
  • sync_state Selection
    default='new' readonly=True args: [('new', 'New'), ('to_update', 'To update'), ('scheduled', 'Scheduled'), ('done', 'Done'), ('to_be_checked', 'To be checked')]
Public methods (7)
  • create(self, vals)
    @api.model
  • get_export_data(self)
    Public method to retrieve export data.
  • jobify_recompute_json(self, force_export=False)
  • recompute_json(self, force_export=False)
    Compute index record data as JSON.
  • synchronize(self)
  • unlink(self)
  • write(self, vals)

New fields (7)
  • backend_id Many2one → se.backend
    ondelete='cascade' required=True string='Backend' args: 'se.backend'
  • batch_size Integer
    default=5000 help='Batch size for exporting element'
  • config_id Many2one → se.index.config
    comodel_name='se.index.config' help='Index configuration record' string='Config'
  • exporter_id Many2one → ir.exports
    string='Exporter' args: 'ir.exports'
  • lang_id Many2one → res.lang
    required=True string='Lang' args: 'res.lang'
  • model_id Many2one → ir.model
    domain=<expr> ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
    compute='_compute_name'
Public methods (12)
  • batch_export(self, force_export=False)
  • clear_index(self)
  • delete_obsolete_item(self, item_ids)
  • export_all_settings(self)
    @api.model
  • export_settings(self)
  • force_batch_export(self)
  • force_recompute_all_binding(self)
  • generate_batch_export_per_index(self, domain=None)
    @api.model
  • onchange_model_id(self)
    @api.onchange('model_id')
  • recompute_all_binding(self, force_export=False, batch_size=500)
  • recompute_all_index(self, domain=None)
    @api.model
  • resynchronize_all_bindings(self)
    Force sync between Odoo records and index records. This method will iter on all item in the index of the search engine if the corresponding binding do not exist on odoo it will create a job that delete all this obsolete items. You should not use this method for day to day job, it only an helper for recovering your index after a dammage. You can also drop index but this will introduce downtime, so it's better to force a resynchronization

New fields (2)
  • body_str Text
    compute='_compute_body_str' default='{}' inverse='_inverse_body_str'
  • name Char
    required=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/search-engine
GIT
GIThttps://github.com/OCA/search-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/search-engine/tree/12.0/connector_search_engine
VERSION
VERSION 3.2.1
CATEGORY
CATEGORYGeneric Modules
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
COMMITTERS
COMMITTERSLaurent Mignon (ACSONE), Sébastien BEAU, oca-travis, OCA-git-bot, Simone Orsi, hparfr
WEBSITE
WEBSITEhttps://github.com/OCA/search-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:25
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/queue:
    - queue_job
OCA/server-env:
    - server_environment
OCA/server-tools:
    - base_jsonify
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
requests
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
se_backend_form_view se.backend.form (in connector_search_engine) se.backend form New
se_backend_tree_view se.backend.tree (in connector_search_engine) se.backend tree New
Models touched (4)

New fields (6)
  • index_ids One2many → se.index
    args: 'se.index', 'backend_id'
  • index_prefix_name Char
    help='Prefix for technical indexes tech name. You could use this to change index names based on current env.'
  • name Char
    required=True
  • specific_backend Reference
    compute='_compute_specific_backend' readonly=True selection='_select_specific_backend' string='Specific backend'
  • specific_model Selection
    readonly=True required=True selection='_select_specific_model' string='Type'
  • tech_name Char
    help='Unique name for technical purposes. Eg: server env keys.' required=True
Public methods (2)
  • create(self, vals)
    @api.model
  • search_engine_name(self)
    @property

New fields (1)
  • se_backend_id Many2one → se.backend
    auto_join=True comodel_name='se.backend' delegate=True index=True ondelete='cascade' required=True
Public methods (2)
  • create(self, vals)
    @api.model
  • unlink(self)
    @api.multi

New fields (7)
  • active Boolean
    default=True string='Active'
  • data Serialized
  • date_modified Date
    readonly=True
  • date_syncronized Date
    readonly=True
  • index_id Many2one → se.index
    ondelete='cascade' required=True string='Index' args: 'se.index'
  • se_backend_id Many2one → se.backend
    related='index_id.backend_id' string='Search Engine Backend' args: 'se.backend'
  • sync_state Selection
    default='new' readonly=True args: [('new', 'New'), ('to_update', 'To update'), ('scheduled', 'Scheduled'), ('done', 'Done')]
Public methods (6)
  • create(self, vals)
    @api.model
  • get_export_data(self)
    Public method to retrieve export data.
  • recompute_json(self, force_export=False)
    @job(default_channel='root.search_engine.recompute_json')
  • synchronize(self)
    @job(default_channel='root.search_engine')@api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (6)
  • backend_id Many2one → se.backend
    ondelete='cascade' required=True string='Backend' args: 'se.backend'
  • batch_size Integer
    default=5000 help='Batch size for exporting element'
  • exporter_id Many2one → ir.exports
    string='Exporter' args: 'ir.exports'
  • lang_id Many2one → res.lang
    required=True string='Lang' args: 'res.lang'
  • model_id Many2one → ir.model
    domain=<expr> required=True string='Model' args: 'ir.model'
  • name Char
    compute='_compute_name'
Public methods (12)
  • batch_export(self)
    @job(default_channel='root.search_engine.prepare_batch_export')
  • clear_index(self)
  • delete_obsolete_item(self, item_ids)
    @job(default_channel='root.search_engine')@api.multi
  • export_all_settings(self)
    @api.model
  • export_settings(self)
    @api.multi
  • force_batch_export(self)
  • force_recompute_all_binding(self)
  • generate_batch_export_per_index(self, domain=None)
    @api.model
  • onchange_model_id(self)
    @api.onchange('model_id')
  • recompute_all_binding(self, force_export=False, batch_size=500)
  • recompute_all_index(self, domain=None)
    @api.model
  • resynchronize_all_bindings(self)
    This method will iter on all item in the index of the search engine if the corresponding binding do not exist on odoo it will create a job that delete all this obsolete items. You should not use this method for day to day job, it only an helper for recovering your index after a dammage. You can also drop index but this will introduce downtime, so it's better to force a resynchronization
REPOSITORY
REPOSITORYOCA/search-engine
GIT
GIThttps://github.com/OCA/search-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/search-engine/tree/10.0/connector_search_engine
VERSION
VERSION 2.0.0
CATEGORY
CATEGORYGeneric Modules
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, ACSONE SA/NV
COMMITTERS
COMMITTERSGitHub, Cédric Pigeon, Laurent Mignon (ACSONE), Sébastien BEAU, Florian da Costa, beau sebastien, David Beal, oca-travis, OCA-git-bot, Simone Orsi, Mourad EL HADJ MIMOUNE, François Honoré
WEBSITE
WEBSITEhttps://github.com/OCA/search-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:03
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/queue:
    - queue_job
OCA/server-tools:
    - base_jsonify
odoo/odoo:
    - mail
    - base
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
requests
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
se_backend_form_view se.backend.form (in connector_search_engine) se.backend form New
se_backend_tree_view se.backend.tree (in connector_search_engine) se.backend tree New
Models touched (4)

New fields (4)
  • index_ids One2many → se.index
    args: 'se.index', 'backend_id'
  • name Char
    required=False
  • specific_backend Reference
    compute='_compute_specific_backend' readonly=True selection='_select_specific_backend' string='Specific backend'
  • specific_model Selection
    readonly=True required=True selection='_select_specific_model' string='Type'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    related='se_backend_id.name' required=False store=True
  • se_backend_id Many2one → se.backend
    auto_join=True comodel_name='se.backend' delegate=True index=True ondelete='cascade' required=True
Public methods (3)
  • create(self, vals)
    @api.model
  • onchange_backend_name(self)
    @api.onchange('name')
  • unlink(self)
    @api.multi

New fields (7)
  • active Boolean
    default=True string='Active'
  • data Serialized
  • date_modified Date
    readonly=True
  • date_syncronized Date
    readonly=True
  • index_id Many2one → se.index
    ondelete='cascade' required=True string='Index' args: 'se.index'
  • se_backend_id Many2one → se.backend
    related='index_id.backend_id' args: 'se.backend'
  • sync_state Selection
    default='new' readonly=True args: [('new', 'New'), ('to_update', 'To update'), ('scheduled', 'Scheduled'), ('done', 'Done')]
Public methods (6)
  • create(self, vals)
    @api.model
  • get_export_data(self)
    Public method to retrieve export data.
  • recompute_json(self, force_export=False)
    @job(default_channel='root.search_engine.recompute_json')
  • synchronize(self)
    @job(default_channel='root.search_engine')@api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (6)
  • backend_id Many2one → se.backend
    ondelete='cascade' required=True string='Backend' args: 'se.backend'
  • batch_size Integer
    default=5000 help='Batch size for exporting element'
  • exporter_id Many2one → ir.exports
    string='Exporter' args: 'ir.exports'
  • lang_id Many2one → res.lang
    required=True string='Lang' args: 'res.lang'
  • model_id Many2one → ir.model
    domain=_get_model_domain required=True string='Model' args: 'ir.model'
  • name Char
    compute='_compute_name' store=True
Public methods (10)
  • batch_export(self)
    @job(default_channel='root.search_engine.prepare_batch_export')
  • clear_index(self)
  • delete_obsolete_item(self, item_ids)
    @job(default_channel='root.search_engine')@api.multi
  • force_batch_export(self)
  • force_recompute_all_binding(self)
  • generate_batch_export_per_index(self, domain=None)
    @api.model
  • onchange_model_id(self)
    @api.onchange('model_id')
  • recompute_all_binding(self, force_export=False, batch_size=500)
  • recompute_all_index(self, domain=None)
    @api.model
  • resynchronize_all_bindings(self)
    This method will iter on all item in the index of the search engine if the corresponding binding do not exist on odoo it will create a job that delete all this obsolete items. You should not use this method for day to day job, it only an helper for recovering your index after a dammage. You can also drop index but this will introduce downtime, so it's better to force a resynchronization