search: Basic search without style or options
This commit is contained in:
parent
d39067e586
commit
b94f4c5944
|
@ -7,6 +7,8 @@ from app.models.forum import Forum
|
|||
|
||||
# TODO: compléter le formulaire de recherche avancée
|
||||
class SearchForm(FlaskForm):
|
||||
class Meta:
|
||||
csrf = False
|
||||
q = StringField('Rechercher', validators=[InputRequired()])
|
||||
|
||||
|
||||
|
|
|
@ -1,9 +1,18 @@
|
|||
from app import app
|
||||
from app.forms.search import AdvancedSearchForm
|
||||
from app import app, db
|
||||
from app.forms.search import AdvancedSearchForm, SearchForm
|
||||
from app.models.post import Post
|
||||
from app.utils.render import render
|
||||
from sqlalchemy import text
|
||||
from flask import request
|
||||
|
||||
|
||||
@app.route('/rechercher')
|
||||
def search():
|
||||
form = AdvancedSearchForm()
|
||||
return render('search.html', form=form)
|
||||
form = AdvancedSearchForm(request.args)
|
||||
results = list()
|
||||
if form.validate():
|
||||
# Search stuff
|
||||
req = text("""SELECT id, text, thread_id, ts_rank_cd(textsearch, query) AS rank FROM comment, websearch_to_tsquery_multilang(:keywords) query, to_tsvector_multilang(text) textsearch WHERE query @@ textsearch ORDER BY rank DESC;""")
|
||||
results = list(db.session.execute(req, {'keywords': '%' + form.q.data + '%'}));
|
||||
|
||||
return render('search.html', form=form, results=results)
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<h1>Recherche avancée</h1>
|
||||
|
||||
<form action="" method="get">
|
||||
{{ form.csrf_token }}
|
||||
<div class="query">
|
||||
{{ form.q.label }}
|
||||
{{ form.q(value=request.args.get('q')) }}
|
||||
|
@ -24,12 +25,13 @@
|
|||
{{ form.scope(value=request.args.get('scope')) }}
|
||||
</div>
|
||||
<div class="submit">{{ form.submit(class_="bg-ok") }}</div>
|
||||
{{form.errors}}
|
||||
</form>
|
||||
</section>
|
||||
<section class="search-results">
|
||||
{% for i in results %}
|
||||
<div>
|
||||
{{ i }}
|
||||
{{ i.id }}<br>{{ i.text }}<br>{{ i.thread_id }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
"""Search functions
|
||||
|
||||
Revision ID: a803745f7840
|
||||
Revises: 5ffc4e562ed8
|
||||
Create Date: 2023-06-27 23:10:06.088917
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'a803745f7840'
|
||||
down_revision = '5ffc4e562ed8'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute("""CREATE FUNCTION websearch_to_tsquery_multilang(text) RETURNS tsquery AS $$
|
||||
SELECT websearch_to_tsquery('french', $1) ||
|
||||
websearch_to_tsquery('english', $1) ||
|
||||
websearch_to_tsquery('simple', $1)
|
||||
$$ LANGUAGE sql IMMUTABLE;""")
|
||||
op.execute("""CREATE FUNCTION to_tsvector_multilang(text) RETURNS tsvector AS $$
|
||||
SELECT to_tsvector('french', $1) ||
|
||||
to_tsvector('english', $1) ||
|
||||
to_tsvector('simple', $1)
|
||||
$$ LANGUAGE sql IMMUTABLE;""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.execute("DROP FUNCTION websearch_to_tsquery_multilang(text);")
|
||||
op.execute("DROP FUNCTION to_tsvector_multilang(text);")
|
Loading…
Reference in New Issue