From: Michael Tremer Date: Tue, 4 Feb 2020 10:39:45 +0000 (+0000) Subject: search: Use PostgreSQL's websearch_to_tsquery() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=22e56c4a93383a45124bc42a4fe130079b784538;p=ipfire.org.git search: Use PostgreSQL's websearch_to_tsquery() This allows us to have a more native search like we know it from larger search engines. Signed-off-by: Michael Tremer --- diff --git a/src/backend/blog.py b/src/backend/blog.py index 6d2e0ac3..b92b0276 100644 --- a/src/backend/blog.py +++ b/src/backend/blog.py @@ -11,7 +11,6 @@ import textile import unicodedata from . import misc -from . import util from .decorators import * class Blog(misc.Object): @@ -80,12 +79,10 @@ class Blog(misc.Object): ORDER BY COALESCE(updated_at, created_at) DESC LIMIT %s", limit) def search(self, query, limit=None): - query = util.parse_search_query(query) - return self._get_posts("SELECT blog.* FROM blog \ LEFT JOIN blog_search_index search_index ON blog.id = search_index.post_id \ - WHERE search_index.document @@ to_tsquery('english', %s) \ - ORDER BY ts_rank(search_index.document, to_tsquery('english', %s)) DESC \ + WHERE search_index.document @@ websearch_to_tsquery('english', %s) \ + ORDER BY ts_rank(search_index.document, websearch_to_tsquery('english', %s)) DESC \ LIMIT %s", query, query, limit) def has_had_recent_activity(self, **kwargs): diff --git a/src/backend/util.py b/src/backend/util.py index a39abd9e..04bde507 100644 --- a/src/backend/util.py +++ b/src/backend/util.py @@ -10,25 +10,6 @@ import re import string import unicodedata -def parse_search_query(query): - q = [] - for word in query.split(): - # Is this lexeme negated? - negated = word.startswith("!") - - # Remove any special characters - word = re.sub(r"\W+", "", word, flags=re.UNICODE) - if not word: - continue - - # Restore negation - if negated: - word = "!%s" % word - - q.append(word) - - return " & ".join(q) - def format_size(s, max_unit=None): units = ("B", "kB", "MB", "GB", "TB") diff --git a/src/backend/wiki.py b/src/backend/wiki.py index 02bb24ff..9bddc32b 100644 --- a/src/backend/wiki.py +++ b/src/backend/wiki.py @@ -124,12 +124,10 @@ class Wiki(misc.Object): return ret def search(self, query, account=None, limit=None): - query = util.parse_search_query(query) - res = self._get_pages("SELECT wiki.* FROM wiki_search_index search_index \ LEFT JOIN wiki ON search_index.wiki_id = wiki.id \ - WHERE search_index.document @@ to_tsquery('english', %s) \ - ORDER BY ts_rank(search_index.document, to_tsquery('english', %s)) DESC", + WHERE search_index.document @@ websearch_to_tsquery('english', %s) \ + ORDER BY ts_rank(search_index.document, websearch_to_tsquery('english', %s)) DESC", query, query) pages = []