]> git.ipfire.org Git - ipfire.org.git/commitdiff
search: Use PostgreSQL's websearch_to_tsquery()
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 4 Feb 2020 10:39:45 +0000 (10:39 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 4 Feb 2020 10:39:45 +0000 (10:39 +0000)
This allows us to have a more native search like we know
it from larger search engines.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/blog.py
src/backend/util.py
src/backend/wiki.py

index 6d2e0ac35d763c84b78763e2c73eb362efb8f605..b92b02767e3a392c67ee22de36fb9ed9b846d564 100644 (file)
@@ -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):
index a39abd9ecae310efd4641520f3510be7dfa59b61..04bde507a4480f6a91a2938a7fd7b94435028b96 100644 (file)
@@ -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")
 
index 02bb24ff786ddbb3376b20fc57bd8d4d5578ffb5..9bddc32b680e10972e53b84d4209bfad27c66777 100644 (file)
@@ -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 = []