From 2bba7067672c79ea3e0d5d994793067eae52221a Mon Sep 17 00:00:00 2001 From: Panos Paparrigopoulos Date: Wed, 3 Feb 2016 13:01:18 +0100 Subject: [PATCH] query_suggestions: unsupported keywords * Adds a message for when unsupported keywords are used. * Addresses inspirehep/inspire-next#817 . Signed-off-by: Panos Paparrigopoulos --- invenio_search/query_suggestions.py | 14 ++++++++++---- invenio_search/walkers/elasticsearch.py | 8 +++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/invenio_search/query_suggestions.py b/invenio_search/query_suggestions.py index b07b2e4d..9e491c57 100644 --- a/invenio_search/query_suggestions.py +++ b/invenio_search/query_suggestions.py @@ -21,21 +21,27 @@ from blinker import Namespace -from flask import flash +from flask import Markup, flash _signals = Namespace() +unsupported_keyword = _signals.signal('unsupported_keyword') malformed_query = _signals.signal('malformed_query') extra_keywords = _signals.signal('extra_keywords') +@unsupported_keyword.connect +def unsupported_keyword_message(sender, keyword, *args, **kwargs): + flash(Markup(str('' + keyword + + " keyword is currently unsupported.")), "query_suggestion") + + @malformed_query.connect def malformed_query_message(sender): - flash("Malformed Query", "query_suggestion") - pass + flash("Malformed Query. The results may contain unintended results.", + "query_suggestion") @extra_keywords.connect def extra_keywords_message(sender): flash("Extra-keyword Query", "query_suggestion") - pass diff --git a/invenio_search/walkers/elasticsearch.py b/invenio_search/walkers/elasticsearch.py index 7dff624b..3ee0d1b2 100644 --- a/invenio_search/walkers/elasticsearch.py +++ b/invenio_search/walkers/elasticsearch.py @@ -30,7 +30,8 @@ ) from invenio_query_parser.visitor import make_visitor -from invenio_search.query_suggestions import extra_keywords +from invenio_search.query_suggestions import extra_keywords, unsupported_keyword + class ElasticSearchDSL(object): @@ -80,6 +81,11 @@ def visit(self, node, op): @visitor(KeywordOp) def visit(self, node, left, right): + if str(left) == 'refersto' or str(left) == 'citedby': + unsupported_keyword.send(keyword=left) + return { + "match_all": {} + } if callable(right): keyword = self.map_keyword_to_fields( left, getattr(right, '__search_mode__', 'a')