diff --git a/base_search_fuzzy/README.rst b/base_search_fuzzy/README.rst index baebdf45c..d7f8f00ab 100644 --- a/base_search_fuzzy/README.rst +++ b/base_search_fuzzy/README.rst @@ -1,107 +1 @@ -.. 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 `_ 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 -`_. In case of trouble, please -check there if your issue has already been reported. If you spotted it first, -help us smash it by providing detailed and welcomed feedback. - -Credits -======= - -Images ------- - -* Odoo Community Association: `Icon `_. - -Contributors ------------- - -* Christoph Giesel -* Jordi Ballester -* Serpent Consulting Services Pvt. Ltd. -* Dave Lasley - -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. +This file is going to be generated by oca-gen-addon-readme. diff --git a/base_search_fuzzy/__init__.py b/base_search_fuzzy/__init__.py index 4704284df..26efcff52 100644 --- a/base_search_fuzzy/__init__.py +++ b/base_search_fuzzy/__init__.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -# © 2016 Eficent Business and IT Consulting Services S.L. -# © 2016 Serpent Consulting Services Pvt. Ltd. +# Copyright 2016 Eficent Business and IT Consulting Services S.L. +# Copyright 2016 Serpent Consulting Services Pvt. Ltd. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models diff --git a/base_search_fuzzy/__manifest__.py b/base_search_fuzzy/__manifest__.py index 10c47bdc1..0c935541d 100644 --- a/base_search_fuzzy/__manifest__.py +++ b/base_search_fuzzy/__manifest__.py @@ -1,12 +1,11 @@ -# -*- coding: utf-8 -*- -# © 2016 Eficent Business and IT Consulting Services S.L. -# © 2016 Serpent Consulting Services Pvt. Ltd. +# Copyright 2016 Eficent Business and IT Consulting Services S.L. +# Copyright 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': '10.0.1.1.0', + 'version': '11.0.1.0.0', 'website': 'https://odoo-community.org/', 'author': 'bloopark systems GmbH & Co. KG, ' 'Eficent, ' diff --git a/base_search_fuzzy/i18n/base_search_fuzzy.pot b/base_search_fuzzy/i18n/base_search_fuzzy.pot deleted file mode 100644 index 9c8e3ad8a..000000000 --- a/base_search_fuzzy/i18n/base_search_fuzzy.pot +++ /dev/null @@ -1,100 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_search_fuzzy -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 10.0alpha1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-06-24 08:47+0000\n" -"PO-Revision-Date: 2016-06-24 08:47+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \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,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,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 -#: model:ir.actions.act_window,name:base_search_fuzzy.trgm_index_action -#: model:ir.ui.menu,name:base_search_fuzzy.trgm_index_menu -#: view:trgm.index:base_search_fuzzy.trgm_index_view_form -#: view:trgm.index:base_search_fuzzy.trgm_index_view_tree -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 "" - -#. module: base_search_fuzzy -#: code:addons/base_search_fuzzy/models/trgm_index.py:123 -#, python-format -msgid "The pg_trgm extension does not exists or cannot be installed." -msgstr "" diff --git a/base_search_fuzzy/models/__init__.py b/base_search_fuzzy/models/__init__.py index c64b6641d..1b706c12b 100644 --- a/base_search_fuzzy/models/__init__.py +++ b/base_search_fuzzy/models/__init__.py @@ -1,6 +1,5 @@ -# -*- coding: utf-8 -*- -# © 2016 Eficent Business and IT Consulting Services S.L. -# © 2016 Serpent Consulting Services Pvt. Ltd. +# Copyright 2016 Eficent Business and IT Consulting Services S.L. +# Copyright 2016 Serpent Consulting Services Pvt. Ltd. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import ir_model from . import trgm_index diff --git a/base_search_fuzzy/models/ir_model.py b/base_search_fuzzy/models/ir_model.py index 19091d19f..c89958284 100644 --- a/base_search_fuzzy/models/ir_model.py +++ b/base_search_fuzzy/models/ir_model.py @@ -1,6 +1,5 @@ -# -*- coding: utf-8 -*- -# © 2016 Eficent Business and IT Consulting Services S.L. -# © 2016 Serpent Consulting Services Pvt. Ltd. +# Copyright 2016 Eficent Business and IT Consulting Services S.L. +# Copyright 2016 Serpent Consulting Services Pvt. Ltd. # Copyright 2017 LasLabs Inc. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging @@ -43,7 +42,7 @@ def patch_leaf_trgm(method): if left in model._fields: params = str(right) - if isinstance(params, basestring): + if isinstance(params, str): params = [params] return query, params elif operator == 'inselect': diff --git a/base_search_fuzzy/models/trgm_index.py b/base_search_fuzzy/models/trgm_index.py index 6feee6de7..cb31a3dc5 100644 --- a/base_search_fuzzy/models/trgm_index.py +++ b/base_search_fuzzy/models/trgm_index.py @@ -1,6 +1,5 @@ -# -*- coding: utf-8 -*- -# © 2016 Eficent Business and IT Consulting Services S.L. -# © 2016 Serpent Consulting Services Pvt. Ltd. +# Copyright 2016 Eficent Business and IT Consulting Services S.L. +# Copyright 2016 Serpent Consulting Services Pvt. Ltd. # Copyright 2017 LasLabs Inc. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging diff --git a/base_search_fuzzy/readme/CONFIGURE.rst b/base_search_fuzzy/readme/CONFIGURE.rst new file mode 100644 index 000000000..7429b3637 --- /dev/null +++ b/base_search_fuzzy/readme/CONFIGURE.rst @@ -0,0 +1,5 @@ +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. diff --git a/base_search_fuzzy/readme/CONTRIBUTORS.rst b/base_search_fuzzy/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..1a545b521 --- /dev/null +++ b/base_search_fuzzy/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Christoph Giesel +* Jordi Ballester +* Serpent Consulting Services Pvt. Ltd. +* Dave Lasley +* Vicent Cubells diff --git a/base_search_fuzzy/readme/DESCRIPTION.rst b/base_search_fuzzy/readme/DESCRIPTION.rst new file mode 100644 index 000000000..c5fa740b1 --- /dev/null +++ b/base_search_fuzzy/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +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. diff --git a/base_search_fuzzy/readme/INSTALL.rst b/base_search_fuzzy/readme/INSTALL.rst new file mode 100644 index 000000000..f7e37120f --- /dev/null +++ b/base_search_fuzzy/readme/INSTALL.rst @@ -0,0 +1,5 @@ +#. 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). diff --git a/base_search_fuzzy/readme/ROADMAP.rst b/base_search_fuzzy/readme/ROADMAP.rst new file mode 100644 index 000000000..7955fa57b --- /dev/null +++ b/base_search_fuzzy/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +* Modify the general search parts (e.g. in tree view or many2one fields) +* Add better `order by` handling diff --git a/base_search_fuzzy/readme/USAGE.rst b/base_search_fuzzy/readme/USAGE.rst new file mode 100644 index 000000000..9844367a8 --- /dev/null +++ b/base_search_fuzzy/readme/USAGE.rst @@ -0,0 +1,24 @@ +#. 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 `_ module. diff --git a/base_search_fuzzy/tests/__init__.py b/base_search_fuzzy/tests/__init__.py index 3363cb44c..839582041 100644 --- a/base_search_fuzzy/tests/__init__.py +++ b/base_search_fuzzy/tests/__init__.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -# © 2016 Eficent Business and IT Consulting Services S.L. -# © 2016 Serpent Consulting Services Pvt. Ltd. +# Copyright 2016 Eficent Business and IT Consulting Services S.L. +# Copyright 2016 Serpent Consulting Services Pvt. Ltd. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import test_query_generation diff --git a/base_search_fuzzy/tests/test_query_generation.py b/base_search_fuzzy/tests/test_query_generation.py index 06b809cf2..024ce1653 100644 --- a/base_search_fuzzy/tests/test_query_generation.py +++ b/base_search_fuzzy/tests/test_query_generation.py @@ -1,6 +1,5 @@ -# -*- coding: utf-8 -*- -# © 2016 Eficent Business and IT Consulting Services S.L. -# © 2016 Serpent Consulting Services Pvt. Ltd. +# Copyright 2016 Eficent Business and IT Consulting Services S.L. +# Copyright 2016 Serpent Consulting Services Pvt. Ltd. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo.osv import expression from odoo.tests.common import TransactionCase, at_install, post_install @@ -37,8 +36,8 @@ class QueryGenerationCase(TransactionCase): where_clause_params) self.assertEqual( complete_where, - 'SELECT FROM "res_partner" WHERE ' - '("res_partner"."name" % \'test\')') + b'SELECT FROM "res_partner" WHERE ' + b'("res_partner"."name" % \'test\')') def test_fuzzy_where_generation_translatable(self): """Check the generation of the where clause for translatable fields.""" @@ -58,7 +57,7 @@ class QueryGenerationCase(TransactionCase): where_clause_params) self.assertIn( - """SELECT id FROM temp_irt_current WHERE name % 'Goschaeftlic'""", + b"""SELECT id FROM temp_irt_current WHERE name % 'Goschaeftlic'""", complete_where) def test_fuzzy_order_generation(self): diff --git a/base_search_fuzzy/views/trgm_index.xml b/base_search_fuzzy/views/trgm_index.xml index 9f4fd2d30..e7efa51eb 100644 --- a/base_search_fuzzy/views/trgm_index.xml +++ b/base_search_fuzzy/views/trgm_index.xml @@ -1,41 +1,40 @@ - - trgm.index.view.form - trgm.index - -
- - - - - - - -
-
+ trgm.index.view.form + trgm.index + +
+ + + + + + + +
+
- trgm.index.view.tree - trgm.index - - - - - - - + trgm.index.view.tree + trgm.index + + + + + + + - Trigram Index - trgm.index - form - tree,form - ir.actions.act_window + Trigram Index + trgm.index + form + tree,form + ir.actions.act_window -