diff options
author | Cédric Bonhomme <kimble.mandel@gmail.com> | 2013-11-12 22:52:04 +0100 |
---|---|---|
committer | Cédric Bonhomme <kimble.mandel@gmail.com> | 2013-11-12 22:52:04 +0100 |
commit | e73be6cf40b50173753a65f6596eb582b1e072ea (patch) | |
tree | 626ac450a0cc22c2c12c6dee38c842a4eeaf9308 | |
parent | Resized search form. (diff) | |
download | newspipe-e73be6cf40b50173753a65f6596eb582b1e072ea.tar.gz newspipe-e73be6cf40b50173753a65f6596eb582b1e072ea.tar.bz2 newspipe-e73be6cf40b50173753a65f6596eb582b1e072ea.zip |
Article searching with Whoosh OK.
-rw-r--r-- | pyaggr3g470r/search.py | 6 | ||||
-rw-r--r-- | pyaggr3g470r/templates/layout.html | 4 | ||||
-rw-r--r-- | pyaggr3g470r/templates/search.html | 43 | ||||
-rw-r--r-- | pyaggr3g470r/views.py | 19 |
4 files changed, 69 insertions, 3 deletions
diff --git a/pyaggr3g470r/search.py b/pyaggr3g470r/search.py index 9fd67124..56aef3f6 100644 --- a/pyaggr3g470r/search.py +++ b/pyaggr3g470r/search.py @@ -34,6 +34,7 @@ from whoosh.fields import * from whoosh.query import * from whoosh.qparser import QueryParser from whoosh.writing import AsyncWriter +from collections import defaultdict import conf import utils @@ -101,6 +102,7 @@ def search(term): Search for `term` in the index. Returns a list of articles. """ + result_dict = defaultdict(list) try: ix = open_dir(indexdir) except (EmptyIndexError, OSError) as e: @@ -108,7 +110,9 @@ def search(term): with ix.searcher() as searcher: query = QueryParser("content", ix.schema).parse(term) results = searcher.search(query, limit=None) - return [(article["feed_id"], article["article_id"]) for article in results] + for article in results: + result_dict[article["feed_id"]].append(article["article_id"]) + return result_dict def nb_documents(): """ diff --git a/pyaggr3g470r/templates/layout.html b/pyaggr3g470r/templates/layout.html index 620f1ca5..0ab81b70 100644 --- a/pyaggr3g470r/templates/layout.html +++ b/pyaggr3g470r/templates/layout.html @@ -57,9 +57,9 @@ <li><a href="/about/">About</a></li> <li><a href="{{ url_for('logout') }}">Logout</a></li> <li> - <form class="navbar-form" method=get action="/" role="search"> + <form class="navbar-form" method=get action="/search/" role="search"> <div class="input-group"> - <input type="text" class="form-control" size="8" placeholder="Search"> + <input type="text" class="form-control" name="query" size="8" placeholder="Search"> <span class="input-group-btn"> <button class="btn btn-default" type="submit"><span class="glyphicon glyphicon-search"></span></button> </span> diff --git a/pyaggr3g470r/templates/search.html b/pyaggr3g470r/templates/search.html new file mode 100644 index 00000000..93fe5062 --- /dev/null +++ b/pyaggr3g470r/templates/search.html @@ -0,0 +1,43 @@ + {% extends "layout.html" %} +{% block content %} +<div class="container"> + {% if feeds|count == 0 %} + <h1>No results.</h1> + {% else %} + {% for feed in feeds|sort(attribute="title") %} + <div class="row"> + <div class="col-md-6 col-md-offset-3"> + <h1>{{ feed.title }}</h1> + <a href="/articles/{{ feed.oid }}"><i class="glyphicon glyphicon-th-list" title="All articles"></i></a> + <a href="/feed/{{ feed.oid }}"><i class="glyphicon glyphicon-eye-open" title="Details"></i></a> + <a href="/edit_feed/{{ feed.oid }}"><i class="glyphicon glyphicon-edit" title="Edit this feed"></i></a> + </div> + </div> + {% for number in range(0, feed.articles|length-(feed.articles|length % 3), 3) %} + <div class="row"> + {% for n in range(number, number+3) %} + <div class="col-xs-6 col-sm-4 col-md-4"> + {% if feed.articles[n].readed %}<h3>{% else %}<h1>{% endif %} + <a href="/article/{{ feed.articles[n].id }}">{{ feed.articles[n].title }}</a><h2> + {% if feed.articles[n].readed %}</h3>{% else %}</h1>{% endif %} + <h6>{{ feed.articles[n].date }}</h6> + </div> + {% endfor %} + </div> + {% endfor %} + {% if feed.articles|length % 3 != 0 %} + <div class="row"> + {% for n in range(feed.articles|length-(feed.articles|length % 3), feed.articles|length) %} + <div class="col-xs-6 col-sm-4 col-md-4"> + {% if feed.articles[n].readed %}<h3>{% else %}<h1>{% endif %} + <a href="/article/{{ feed.articles[n].id }}">{{ feed.articles[n].title }}</a><h2> + {% if feed.articles[n].readed %}</h3>{% else %}</h1>{% endif %} + <h6>{{ feed.articles[n].date }}</h6> + </div> + {% endfor %} + </div> + {% endif %} + {% endfor %} + {% endif %} +</div><!-- /.container --> +{% endblock %}
\ No newline at end of file diff --git a/pyaggr3g470r/views.py b/pyaggr3g470r/views.py index 030272b9..53172b16 100644 --- a/pyaggr3g470r/views.py +++ b/pyaggr3g470r/views.py @@ -40,6 +40,7 @@ from pyaggr3g470r import app, db import feedgetter import models +import search as fastsearch login_manager = LoginManager() @@ -199,6 +200,24 @@ def unread(): result.append(feed) return render_template('unread.html', feeds=result) +@app.route('/search/', methods=['GET']) +@login_required +def search(): + user = models.User.objects(email=g.user.email).first() + result = [] + query = request.args.get('query', None) + if query != None: + results = fastsearch.search(query) + for feed_id in results: + for feed in user.feeds: + if str(feed.oid) == feed_id: + feed.articles = [] + for article_id in results[feed_id]: + current_article = models.Article.objects(id=article_id).first() + feed.articles.append(current_article) + result.append(feed) + return render_template('search.html', feeds=result) + @app.route('/management/', methods=['GET']) @login_required def management(): |