import re
from . import misc
+from . import util
from .decorators import *
class Wiki(misc.Object):
return ret
+ def search(self, query, 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 \
+ LIMIT %s", query, query, limit)
+
+ return list(res)
+
+ def refresh(self):
+ """
+ Needs to be called after a page has been changed
+ """
+ self.db.execute("REFRESH MATERIALIZED VIEW wiki_search_index")
+
class Page(misc.Object):
def init(self, id, data=None):