Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions base_search_fuzzy/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3

=========================
PostgreSQL Trigram Search
=========================

This addon provides the ability to create GIN or GiST indexes of char and text
fields and also to use the search operator `%` in search domains. Currently
this module doesn't change the backend search or anything else. It provides
only the possibilty to perfrom the fuzzy search for external addons.


Installation
============

#. The PostgreSQL extension ``pg_trgm`` should be available. In debian based
distribution you have to install the `postgresql-contrib` module.
#. Install the ``pg_trgm`` extension to your database or give your postgresql
user the ``SUPERUSER`` right (this allows the odoo module to install the
extension to the database).


Configuration
=============

If the odoo module is installed:

#. You can define ``GIN`` and ``GiST`` indexes for `char` and `text` via
`Settings -> Database Structure -> Trigram Index`. The index name will
automatically created for new entries.


Usage
=====

#. You can create an index for the `name` field of `res.partner`.
#. In the search you can use:

``self.env['res.partner'].search([('name', '%', 'Jon Miller)])``

#. In this example the function will return positive result for `John Miller` or
`John Mill`.

#. You can tweak the number of strings to be returned by adjusting the set limit
(default: 0.3). NB: Currently you have to set the limit by executing the
following SQL statment:

``self.env.cr.execute("SELECT set_limit(0.2);")``

#. Another interesting feature is the use of ``similarity(column, 'text')``
function in the ``order`` parameter to order by similarity. This module just
contains a basic implementation which doesn't perform validations and has to
start with this function. For example you can define the function as
followed:

``similarity(%s.name, 'John Mil') DESC" % self.env['res.partner']._table``

For further questions read the Documentation of the
`pg_trgm <https://www.postgresql.org/docs/current/static/pgtrgm.html>`_ module.

Known issues / Roadmap
======================

* Modify the general search parts (e.g. in tree view or many2one fields)
* add better `order by` handling


Bug Tracker
===========

Bugs are tracked on `GitHub Issues
<https://github.com/OCA/server-tools/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smashing it by providing a detailed and welcomed feedback.

Credits
=======

Images
------

* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.

Contributors
------------

* Christoph Giesel <https://github.com/christophlsa>
* Jordi Ballester <jordi.ballester@eficent.com>
* Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>

Maintainer
----------

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

This module is maintained by the OCA.

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

To contribute to this module, please visit https://odoo-community.org.
5 changes: 5 additions & 0 deletions base_search_fuzzy/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import models
22 changes: 22 additions & 0 deletions base_search_fuzzy/__openerp__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': "Fuzzy Search",
'summary': "Fuzzy search with the PostgreSQL trigram extension",
'category': 'Uncategorized',
'version': '9.0.1.0.0',
'website': 'https://odoo-community.org/',
'author': 'bloopark systems GmbH & Co. KG, '
'Eficent, '
'Serpent CS, '
'Odoo Community Association (OCA)',
'license': 'AGPL-3',
'depends': ['base'],
'data': [
'views/trgm_index.xml',
'security/ir.model.access.csv',
],
'installable': True,
}
124 changes: 124 additions & 0 deletions base_search_fuzzy/i18n/am.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_search_fuzzy
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 09:29+0000\n"
"PO-Revision-Date: 2016-09-16 09:29+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: Amharic (https://www.transifex.com/oca/teams/23907/am/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: am\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. module: base_search_fuzzy
#: help:trgm.index,index_type:0
msgid ""
"Cite from PostgreSQL documentation: \"As a rule of thumb, a GIN index is "
"faster to search than a GiST index, but slower to build or update; so GIN is"
" better suited for static data and GiST for often-updated data.\""
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,create_uid:0
msgid "Created by"
msgstr "Creado por"

#. module: base_search_fuzzy
#: field:trgm.index,create_date:0
msgid "Created on"
msgstr "Creado en"

#. module: base_search_fuzzy
#: field:trgm.index,display_name:0
msgid "Display Name"
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,field_id:0
msgid "Field"
msgstr ""

#. module: base_search_fuzzy
#: selection:trgm.index,index_type:0
msgid "GIN"
msgstr ""

#. module: base_search_fuzzy
#: selection:trgm.index,index_type:0
msgid "GiST"
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,id:0
msgid "ID"
msgstr "ID"

#. module: base_search_fuzzy
#: field:trgm.index,index_name:0
msgid "Index Name"
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,index_type:0
msgid "Index Type"
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,__last_update:0
msgid "Last Modified on"
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,write_uid:0
msgid "Last Updated by"
msgstr "Última actualización por"

#. module: base_search_fuzzy
#: field:trgm.index,write_date:0
msgid "Last Updated on"
msgstr "Última actualización en"

#. module: base_search_fuzzy
#: model:ir.model,name:base_search_fuzzy.model_ir_model
msgid "Models"
msgstr ""

#. module: base_search_fuzzy
#: help:trgm.index,index_name:0
msgid ""
"The index name is automatically generated like fieldname_indextype_idx. If "
"the index already exists and the index is located in the same table then "
"this index is resused. If the index is located in another table then a "
"number is added at the end of the index name."
msgstr ""

#. module: base_search_fuzzy
#: code:addons/base_search_fuzzy/models/trgm_index.py:122
#, python-format
msgid "The pg_trgm extension does not exists or cannot be installed."
msgstr ""

#. module: base_search_fuzzy
#: view:trgm.index:base_search_fuzzy.trgm_index_view_form
#: view:trgm.index:base_search_fuzzy.trgm_index_view_tree
msgid "Trigam Index"
msgstr ""

#. module: base_search_fuzzy
#: model:ir.actions.act_window,name:base_search_fuzzy.trgm_index_action
#: model:ir.ui.menu,name:base_search_fuzzy.trgm_index_menu
msgid "Trigram Index"
msgstr ""

#. module: base_search_fuzzy
#: help:trgm.index,field_id:0
msgid "You can either select a field of type \"text\" or \"char\"."
msgstr ""
124 changes: 124 additions & 0 deletions base_search_fuzzy/i18n/ar.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_search_fuzzy
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-28 21:28+0000\n"
"PO-Revision-Date: 2016-11-28 21:28+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: Arabic (https://www.transifex.com/oca/teams/23907/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"

#. module: base_search_fuzzy
#: help:trgm.index,index_type:0
msgid ""
"Cite from PostgreSQL documentation: \"As a rule of thumb, a GIN index is "
"faster to search than a GiST index, but slower to build or update; so GIN is"
" better suited for static data and GiST for often-updated data.\""
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,create_uid:0
msgid "Created by"
msgstr "أنشئ بواسطة"

#. module: base_search_fuzzy
#: field:trgm.index,create_date:0
msgid "Created on"
msgstr "أنشئ في"

#. module: base_search_fuzzy
#: field:trgm.index,display_name:0
msgid "Display Name"
msgstr "اسم العرض"

#. module: base_search_fuzzy
#: field:trgm.index,field_id:0
msgid "Field"
msgstr ""

#. module: base_search_fuzzy
#: selection:trgm.index,index_type:0
msgid "GIN"
msgstr ""

#. module: base_search_fuzzy
#: selection:trgm.index,index_type:0
msgid "GiST"
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,id:0
msgid "ID"
msgstr "المعرف"

#. module: base_search_fuzzy
#: field:trgm.index,index_name:0
msgid "Index Name"
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,index_type:0
msgid "Index Type"
msgstr ""

#. module: base_search_fuzzy
#: field:trgm.index,__last_update:0
msgid "Last Modified on"
msgstr "آخر تعديل في"

#. module: base_search_fuzzy
#: field:trgm.index,write_uid:0
msgid "Last Updated by"
msgstr "آخر تحديث بواسطة"

#. module: base_search_fuzzy
#: field:trgm.index,write_date:0
msgid "Last Updated on"
msgstr "آخر تحديث في"

#. module: base_search_fuzzy
#: model:ir.model,name:base_search_fuzzy.model_ir_model
msgid "Models"
msgstr ""

#. module: base_search_fuzzy
#: help:trgm.index,index_name:0
msgid ""
"The index name is automatically generated like fieldname_indextype_idx. If "
"the index already exists and the index is located in the same table then "
"this index is resused. If the index is located in another table then a "
"number is added at the end of the index name."
msgstr ""

#. module: base_search_fuzzy
#: code:addons/base_search_fuzzy/models/trgm_index.py:122
#, python-format
msgid "The pg_trgm extension does not exists or cannot be installed."
msgstr ""

#. module: base_search_fuzzy
#: view:trgm.index:base_search_fuzzy.trgm_index_view_form
#: view:trgm.index:base_search_fuzzy.trgm_index_view_tree
msgid "Trigam Index"
msgstr ""

#. module: base_search_fuzzy
#: model:ir.actions.act_window,name:base_search_fuzzy.trgm_index_action
#: model:ir.ui.menu,name:base_search_fuzzy.trgm_index_menu
msgid "Trigram Index"
msgstr ""

#. module: base_search_fuzzy
#: help:trgm.index,field_id:0
msgid "You can either select a field of type \"text\" or \"char\"."
msgstr ""
Loading