From 06d3a09e11439cb6525dd391b7b2badd5f877415 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 7 Jun 2018 11:22:35 -0400 Subject: [PATCH] Quick hack for search order options --- app.py | 5 +++-- database.py | 16 +++++++++++++--- templates/search.html | 14 ++++++++++++-- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app.py b/app.py index 6ae90cd..d91c857 100644 --- a/app.py +++ b/app.py @@ -96,18 +96,19 @@ def websites(): def search(): q = request.args.get("q") if "q" in request.args else "" + sort_order = request.args.get("sort_order") if "sort_order" in request.args else "score" page = int(request.args.get("p")) if "p" in request.args else 0 if q: try: - hits = db.search(q, 100, page) + hits = db.search(q, 100, page, sort_order) except InvalidQueryException as e: flash("Invalid query: " + str(e), "warning") return redirect("/search") else: hits = None - return render_template("search.html", results=hits, q=q, p=page) + return render_template("search.html", results=hits, q=q, p=page, sort_order=sort_order) @app.route("/contribute") diff --git a/database.py b/database.py index 6a96f25..0197016 100644 --- a/database.py +++ b/database.py @@ -30,6 +30,13 @@ class File: class Database: + SORT_ORDERS = { + "score": "ORDER BY rank", + "size_asc": "ORDER BY size ASC", + "size_dsc": "ORDER BY size DESC", + "none": "" + } + def __init__(self, db_path): self.db_path = db_path @@ -200,18 +207,21 @@ class Database: return stats - def search(self, q, limit: int = 25, offset: int = 0): + def search(self, q, limit: int = 25, offset: int = 0, sort_order="score"): with sqlite3.connect(self.db_path) as conn: cursor = conn.cursor() try: + order_by = Database.SORT_ORDERS.get(sort_order, "") + print(order_by) cursor.execute("SELECT size, Website.url, WebsitePath.path, File.name, Website.id FROM File_index " "INNER JOIN File ON File.id = File_index.rowid " "INNER JOIN WebsitePath ON File.path_id = WebsitePath.id " "INNER JOIN Website ON website_id = Website.id " - "WHERE File_index MATCH ? " - "ORDER BY rank LIMIT ? OFFSET ?", (q, limit, offset * limit)) + "WHERE File_index MATCH ? " + + order_by + " LIMIT ? OFFSET ?", + (q, limit, offset * limit)) except sqlite3.OperationalError as e: raise InvalidQueryException(str(e)) diff --git a/templates/search.html b/templates/search.html index ddd28b2..5f0c0da 100644 --- a/templates/search.html +++ b/templates/search.html @@ -11,8 +11,18 @@
-
- +
+
+ +
+
+ +