diff options
Diffstat (limited to 'searx/webapp.py')
| -rwxr-xr-x | searx/webapp.py | 43 |
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': |