diff --git a/app.py b/app.py index 6b92256..8dfb9b7 100644 --- a/app.py +++ b/app.py @@ -8,6 +8,7 @@ import od_util import config from flask_caching import Cache from task import TaskDispatcher, Task +from search.search import ElasticSearchEngine app = Flask(__name__) recaptcha = ReCaptcha(app=app, @@ -21,6 +22,7 @@ app.jinja_env.globals.update(get_color=od_util.get_color) app.jinja_env.globals.update(get_mime=od_util.get_mime) taskDispatcher = TaskDispatcher() +searchEngine = ElasticSearchEngine("od-database") @app.template_filter("datetime_format") @@ -108,14 +110,15 @@ def search(): if q: try: # hits = sea.search(q, per_page, page, sort_order) - print("FIXME: Search") - hits = [] + hits = searchEngine.search(q, page, per_page) except InvalidQueryException as e: flash("Invalid query: " + str(e), "warning") return redirect("/search") else: hits = None + print(hits) + return render_template("search.html", results=hits, q=q, p=page, sort_order=sort_order, per_page=per_page, results_set=config.RESULTS_PER_PAGE) diff --git a/search/search.py b/search/search.py index bdbd2d1..f00314a 100644 --- a/search/search.py +++ b/search/search.py @@ -109,9 +109,10 @@ class ElasticSearchEngine(SearchEngine): return "\n".join("".join([action_string, doc[:-1], website_id_string]) for doc in docs) - def search(self, query) -> {}: + def search(self, query, page, per_page) -> {}: filters = [] + sort_by = ["_score"] page = self.es.search(body={ "query": { @@ -126,22 +127,15 @@ class ElasticSearchEngine(SearchEngine): "filter": filters } }, - "sort": [ - "_score" - ], + "sort": sort_by, "highlight": { "fields": { "name": {"pre_tags": [""], "post_tags": [""]}, + "path": {"pre_tags": [""], "post_tags": [""]} } }, - "size": 40}, index=self.index_name, scroll="8m") + "size": per_page, "from": page * per_page}, index=self.index_name) # todo get scroll time from config # todo get size from config return page - - def scroll(self, scroll_id) -> {}: - try: - return self.es.scroll(scroll_id=scroll_id, scroll="3m") # todo get scroll time from config - except TransportError: - return None diff --git a/static/css/main.css b/static/css/main.css index 51b88d8..d268c9d 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -73,3 +73,6 @@ 100% { background-color: rgba(255, 255, 255, 0.6); } } +.hl { + background: #fff217; +} \ No newline at end of file diff --git a/templates/search.html b/templates/search.html index c8bf5ec..43b5db7 100644 --- a/templates/search.html +++ b/templates/search.html @@ -18,10 +18,17 @@
@@ -40,7 +47,7 @@
- {% if results %} + {% if results["hits"]["total"] > 0 %}
@@ -48,39 +55,46 @@ - {% for hit in results %} - {% set path = hit[1] + hit[2] %} + {% for hit in results["hits"]["hits"] %} + {% set src = hit["_source"] %} + {% set hl_name = hit["highlight"]["name"][0] if "name" in hit["highlight"] else src["name"] %} + {% set hl_path = hit["highlight"]["path"][0] if "path" in hit["highlight"] else src["path"] %} + + {# TODO: website url + path #} + {% set path = src["path"] %} {# File size #} {% endfor %}
{# File name & link #} - - {{ hit[3] | truncate(50, True, "..>") }} + + {{ hl_name |safe }} {# File type badge #} - {% set mime = get_mime(hit[3]) %} + {% set mime = get_mime(src["path"]) %} {% if mime %} - {{ hit[3][hit[3].rfind(".") + 1:] }} + {{ src["path"][src["path"].rfind(".") + 1:] }} {% endif %} {# File path #}
{{ hit[1] }}{{ truncate_path(hit[2], 60) }} + {# todo: website url #} + href="/website/{{ src["website_id"] }}">{{ hl_path | safe }}{{ truncate_path(src["path"], 60) }}
- {{ hit[0] | filesizeformat if hit[0] >= 0 else "?"}} + {{ src["size"] | filesizeformat if src["size"] >= 0 else "?" }}
- - Next + {% if results["hits"]["total"] > (p + 1) * per_page %} + Next + {% endif %} {% if p > 0 %} Previous