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/* diff --git a/requirements.txt b/requirements.txt index 35e3f748..dfe686ee 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.7 -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.2 google-auth-oauthlib==1.2.0 diff --git a/src/flask_se.py b/src/flask_se.py index 9f5b01ea..37eb080e 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,8 @@ # 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" +whooshee.init_app(app) # Init Migrate migrate = Migrate(app, db, render_as_batch=True) @@ -715,4 +709,6 @@ def sitemap(): with app.app_context(): init_db() else: + with app.app_context(): + whooshee.reindex() app.run(port=5000, debug=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..38ee2eb7 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", "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)