summaryrefslogtreecommitdiff
path: root/searx/webapp.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/webapp.py')
-rwxr-xr-xsearx/webapp.py43
1 files changed, 19 insertions, 24 deletions
diff --git a/searx/webapp.py b/searx/webapp.py
index 4752eb279..f1034c270 100755
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -74,12 +74,13 @@ from searx.languages import language_codes as languages
from searx.search import SearchWithPlugins, initialize as search_initialize
from searx.search.checker import get_result as checker_get_result
from searx.query import RawTextQuery
-from searx.autocomplete import searx_bang, backends as autocomplete_backends
+from searx.autocomplete import search_autocomplete, backends as autocomplete_backends
from searx.plugins import plugins
from searx.plugins.oa_doi_rewrite import get_doi_resolver
from searx.preferences import Preferences, ValidationException, LANGUAGE_CODES
from searx.answerers import answerers
from searx.poolrequests import get_global_proxies
+from searx.answerers import ask
from searx.metrology.error_recorder import errors_per_engines
# serve pages with HTTP/1.1
@@ -763,27 +764,18 @@ def about():
def autocompleter():
"""Return autocompleter results"""
+ # run autocompleter
+ results = []
+
# set blocked engines
disabled_engines = request.preferences.engines.get_disabled()
# parse query
raw_text_query = RawTextQuery(request.form.get('q', ''), disabled_engines)
- # check if search query is set
- if not raw_text_query.getQuery():
- return '', 400
-
- # run autocompleter
- completer = autocomplete_backends.get(request.preferences.get_value('autocomplete'))
-
- # parse searx specific autocompleter results like !bang
- raw_results = searx_bang(raw_text_query)
-
# normal autocompletion results only appear if no inner results returned
- # and there is a query part besides the engine and language bangs
- if len(raw_results) == 0 and completer and (len(raw_text_query.query_parts) > 1 or
- (len(raw_text_query.languages) == 0 and
- not raw_text_query.specific)):
+ # and there is a query part
+ if len(raw_text_query.autocomplete_list) == 0 and len(raw_text_query.getQuery()) > 0:
# get language from cookie
language = request.preferences.get_value('language')
if not language or language == 'all':
@@ -791,15 +783,18 @@ def autocompleter():
else:
language = language.split('-')[0]
# run autocompletion
- raw_results.extend(completer(raw_text_query.getQuery(), language))
-
- # parse results (write :language and !engine back to result string)
- results = []
- for result in raw_results:
- raw_text_query.changeQuery(result)
-
- # add parsed result
- results.append(raw_text_query.getFullQuery())
+ raw_results = search_autocomplete(request.preferences.get_value('autocomplete'),
+ raw_text_query.getQuery(), language)
+ for result in raw_results:
+ results.append(raw_text_query.changeQuery(result).getFullQuery())
+
+ if len(raw_text_query.autocomplete_list) > 0:
+ for autocomplete_text in raw_text_query.autocomplete_list:
+ results.append(raw_text_query.get_autocomplete_full_query(autocomplete_text))
+
+ for answers in ask(raw_text_query):
+ for answer in answers:
+ results.append(str(answer['answer']))
# return autocompleter results
if request.headers.get('X-Requested-With') == 'XMLHttpRequest':