mirror of
https://github.com/searxng/searxng.git
synced 2025-07-23 21:29:21 +02:00
[enh] autocomplete refactoring, autocomplete on external bangs
This commit is contained in:
parent
4fa1290c11
commit
63f17d2e4c
4 changed files with 496 additions and 221 deletions
|
@ -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))
|
||||
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())
|
||||
|
||||
# parse results (write :language and !engine back to result string)
|
||||
results = []
|
||||
for result in raw_results:
|
||||
raw_text_query.changeQuery(result)
|
||||
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))
|
||||
|
||||
# add parsed result
|
||||
results.append(raw_text_query.getFullQuery())
|
||||
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':
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue