From 2b9f4388baaa629b905cf2b313970464a4448e12 Mon Sep 17 00:00:00 2001 From: Mikhail Kiselyov Date: Mon, 20 May 2024 17:00:28 +0300 Subject: [PATCH 1/5] use whooshee for full text search in /theses --- requirements.txt | 2 +- src/flask_se.py | 14 +++++--------- src/flask_se_theses.py | 2 +- src/se_models.py | 13 ++++--------- 4 files changed, 11 insertions(+), 20 deletions(-) diff --git a/requirements.txt b/requirements.txt index ec911fcb..e78f7723 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,8 +7,8 @@ Flask-BasicAuth==0.2.0 Flask-Login==0.6.3 Flask-Markdown==0.3 Flask-Migrate==4.0.5 -flask-msearch==0.2.9.4 Flask-SimpleMDE==0.3.0 +Flask-Whooshee==0.9.1 Flask-WTF==1.2.1 Frozen-Flask==1.0.1 google-auth-oauthlib==1.2.0 diff --git a/src/flask_se.py b/src/flask_se.py index 9f5b01ea..42acf07b 100644 --- a/src/flask_se.py +++ b/src/flask_se.py @@ -26,7 +26,6 @@ ) from se_models import ( db, - search, init_db, Staff, Users, @@ -37,6 +36,7 @@ DiplomaThemes, CurrentThesis, recalculate_post_rank, + whooshee, ) from flask_se_auth import ( login_manager, @@ -377,14 +377,10 @@ # Init Database db.app = app db.init_app(app) - -app.config["MSEARCH_BACKEND"] = "whoosh" -app.config["MSEARCH_ENABLE"] = True -search.init_app(app) -# search.create_index(Thesis, update=True) -# search.create_index(Users, update=True) -# search.create_index(Thesis, update=True) -# search.create_index(Users, update=True) +app.config["WHOOSHEE_DIR"] = 'whooshee' +with app.app_context(): + whooshee.init_app(app) + whooshee.reindex() # Init Migrate migrate = Migrate(app, db, render_as_batch=True) diff --git a/src/flask_se_theses.py b/src/flask_se_theses.py index 7168ef4d..931f4083 100644 --- a/src/flask_se_theses.py +++ b/src/flask_se_theses.py @@ -107,7 +107,7 @@ def fetch_theses(): if search: records = ( - Thesis.query.msearch(search) + Thesis.query.whooshee_search(search) .filter(Thesis.temporary == False) .filter(Thesis.publish_year >= startdate) .filter(Thesis.publish_year <= enddate) diff --git a/src/se_models.py b/src/se_models.py index 625336c3..6815d687 100644 --- a/src/se_models.py +++ b/src/se_models.py @@ -12,7 +12,7 @@ from flask import render_template from flask_sqlalchemy import SQLAlchemy from flask_login import UserMixin -from flask_msearch import Search +from flask_whooshee import Whooshee from werkzeug.security import generate_password_hash from datetime import datetime @@ -35,10 +35,7 @@ metadata = MetaData(naming_convention=convention) db = SQLAlchemy(metadata=metadata) -# Workaround: flask-msearch does not work with recent Flask-SQLAlchemy. -# Pass 'db' parameter explicitly to mitigate this problem. -search = Search(db=db) - +whooshee = Whooshee() tag = db.Table( "tag", @@ -132,9 +129,8 @@ def __str__(self): return self.user.get_name() +@whooshee.register_model("first_name", "middle_name", "last_name") class Users(db.Model, UserMixin): - __searchable__ = ["first_name", "middle_name", "last_name"] - id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True, nullable=True) @@ -462,9 +458,8 @@ def __repr__(self): return "<%r>" % (self.name) +@whooshee.register_model("name_ru", "name_en", "description", "author", "text") class Thesis(db.Model): - __searchable__ = ["name_ru", "description", "author", "text"] - id = db.Column(db.Integer, primary_key=True) type_id = db.Column(db.Integer, db.ForeignKey("worktype.id"), nullable=False) From 3a422e0fedba6a8064d9d50be6a171f91baaf8b2 Mon Sep 17 00:00:00 2001 From: Mikhail Kiselyov Date: Mon, 20 May 2024 17:21:18 +0300 Subject: [PATCH 2/5] remove name_en from Thesis model indexable list --- src/se_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/se_models.py b/src/se_models.py index 6815d687..38ee2eb7 100644 --- a/src/se_models.py +++ b/src/se_models.py @@ -458,7 +458,7 @@ def __repr__(self): return "<%r>" % (self.name) -@whooshee.register_model("name_ru", "name_en", "description", "author", "text") +@whooshee.register_model("name_ru", "description", "author", "text") class Thesis(db.Model): id = db.Column(db.Integer, primary_key=True) From 3f65fba2a32eba364fa32dfb800ee1e6269377bf Mon Sep 17 00:00:00 2001 From: Mikhail Kiselyov Date: Mon, 20 May 2024 17:33:46 +0300 Subject: [PATCH 3/5] add whooshee index dir to gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c7b88fd1..d3907557 100644 --- a/.gitignore +++ b/.gitignore @@ -103,4 +103,4 @@ src/static/practice/*/*.pdf src/static/thesis/*/*.pdf # Do not track fulltext search files -src/msearch/* \ No newline at end of file +src/whooshee/* From 12d43c6965d7cdd59c3e3326c72f41e4f923c22b Mon Sep 17 00:00:00 2001 From: Mikhail Kiselyov Date: Mon, 20 May 2024 17:35:10 +0300 Subject: [PATCH 4/5] fix formatting --- src/flask_se.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/flask_se.py b/src/flask_se.py index 42acf07b..94211cd1 100644 --- a/src/flask_se.py +++ b/src/flask_se.py @@ -377,7 +377,7 @@ # Init Database db.app = app db.init_app(app) -app.config["WHOOSHEE_DIR"] = 'whooshee' +app.config["WHOOSHEE_DIR"] = "whooshee" with app.app_context(): whooshee.init_app(app) whooshee.reindex() From 278f7922a08aba35703a0e5ecb454cafee39245c Mon Sep 17 00:00:00 2001 From: Mikhail Kiselyov Date: Mon, 20 May 2024 18:14:09 +0300 Subject: [PATCH 5/5] reindex only when running the app --- src/flask_se.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/flask_se.py b/src/flask_se.py index 94211cd1..37eb080e 100644 --- a/src/flask_se.py +++ b/src/flask_se.py @@ -378,9 +378,7 @@ db.app = app db.init_app(app) app.config["WHOOSHEE_DIR"] = "whooshee" -with app.app_context(): - whooshee.init_app(app) - whooshee.reindex() +whooshee.init_app(app) # Init Migrate migrate = Migrate(app, db, render_as_batch=True) @@ -711,4 +709,6 @@ def sitemap(): with app.app_context(): init_db() else: + with app.app_context(): + whooshee.reindex() app.run(port=5000, debug=True)