diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-02-20 16:20:31 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-02-20 16:20:31 +0100 |
commit | 3aafd91d3b5dafc0603d4c8edf80173a82535d6a (patch) | |
tree | 59e6ee0433f382077412881957ab84a3d8278467 /ishtar_common | |
parent | bc2584a753e93031475afd03d839a6d8316cfc84 (diff) | |
download | Ishtar-3aafd91d3b5dafc0603d4c8edf80173a82535d6a.tar.bz2 Ishtar-3aafd91d3b5dafc0603d4c8edf80173a82535d6a.zip |
Fix unaccented search in search vector (refs #3152)
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 7 | ||||
-rw-r--r-- | ishtar_common/views.py | 17 |
2 files changed, 18 insertions, 6 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 201cf7c21..e33fb73e4 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -34,6 +34,7 @@ import shutil from subprocess import Popen, PIPE import tempfile import time +from unidecode import unidecode from django.conf import settings from django.contrib.postgres.fields import JSONField @@ -1093,7 +1094,11 @@ class FullSearch(models.Model): *self.BASE_SEARCH_VECTORS, config=settings.ISHTAR_SEARCH_LANGUAGE )).values('search') - search_vectors.append(q.all()[0]['search']) + search_vectors.append( + unidecode( + q.all()[0]['search'].decode('utf-8') + ) + ) self.search_vector = merge_tsvectors(search_vectors) changed = old_search != self.search_vector if save and changed: diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 8db0e9460..bd558a62e 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -17,8 +17,6 @@ # See the file COPYING for details. -from tidylib import tidy_document as tidy - from copy import copy, deepcopy import csv import datetime @@ -28,7 +26,9 @@ from markdown import markdown import optparse import re from tempfile import NamedTemporaryFile +from tidylib import tidy_document as tidy import unicodedata +from unidecode import unidecode from weasyprint import HTML, CSS from weasyprint.fonts import FontConfiguration @@ -631,6 +631,15 @@ def _get_values(request, val): return new_vals +def _search_manage_search_vector(dct): + if 'search_vector' in dct: + dct['search_vector'] = SearchQuery( + unidecode(dct['search_vector']), + config=settings.ISHTAR_SEARCH_LANGUAGE + ) + return dct + + DEFAULT_ROW_NUMBER = 10 # length is used by ajax DataTables requests EXCLUDED_FIELDS = ['length'] @@ -899,9 +908,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], reqs |= q and_reqs.append(reqs) break - if 'search_vector' in dct: - dct['search_vector'] = SearchQuery( - dct['search_vector'], config=settings.ISHTAR_SEARCH_LANGUAGE) + dct = _search_manage_search_vector(dct) query = Q(**dct) for k, or_req in or_reqs: alt_dct = dct.copy() |