Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
searx-engine
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
searx-engine
Commits
4e2dae30
Commit
4e2dae30
authored
Jan 10, 2015
by
Thomas Pointhuber
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[enh] add autocompletion for searx-specific strings
parent
29a526ff
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
3 deletions
+85
-3
autocomplete.py
searx/autocomplete.py
+79
-0
query.py
searx/query.py
+1
-1
webapp.py
searx/webapp.py
+5
-2
No files found.
searx/autocomplete.py
View file @
4e2dae30
...
@@ -20,6 +20,85 @@ from lxml import etree
...
@@ -20,6 +20,85 @@ from lxml import etree
from
requests
import
get
from
requests
import
get
from
json
import
loads
from
json
import
loads
from
urllib
import
urlencode
from
urllib
import
urlencode
from
searx.languages
import
language_codes
from
searx.engines
import
(
categories
,
engines
,
engine_shortcuts
)
def
searx_bang
(
full_query
):
'''check if the searchQuery contain a bang, and create fitting autocompleter results'''
# check if there is a query which can be parsed
if
len
(
full_query
.
getSearchQuery
())
==
0
:
return
[]
results
=
[]
# check if current query stats with !bang
if
full_query
.
getSearchQuery
()[
0
]
==
'!'
:
if
len
(
full_query
.
getSearchQuery
())
==
1
:
# show some example queries
# TODO, check if engine is not avaliable
results
.
append
(
"!images"
)
results
.
append
(
"!wikipedia"
)
results
.
append
(
"!osm"
)
else
:
engine_query
=
full_query
.
getSearchQuery
()[
1
:]
# check if query starts with categorie name
for
categorie
in
categories
:
if
categorie
.
startswith
(
engine_query
):
results
.
append
(
'!{categorie}'
.
format
(
categorie
=
categorie
))
# check if query starts with engine name
for
engine
in
engines
:
if
engine
.
startswith
(
engine_query
):
results
.
append
(
'!{engine}'
.
format
(
engine
=
engine
.
replace
(
' '
,
'_'
)))
# check if query starts with engine shortcut
for
engine_shortcut
in
engine_shortcuts
:
if
engine_shortcut
.
startswith
(
engine_query
):
results
.
append
(
'!{engine_shortcut}'
.
format
(
engine_shortcut
=
engine_shortcut
))
# check if current query stats with :bang
elif
full_query
.
getSearchQuery
()[
0
]
==
':'
:
if
len
(
full_query
.
getSearchQuery
())
==
1
:
# show some example queries
results
.
append
(
":en"
)
results
.
append
(
":en_us"
)
results
.
append
(
":english"
)
results
.
append
(
":united_kingdom"
)
else
:
engine_query
=
full_query
.
getSearchQuery
()[
1
:]
for
lc
in
language_codes
:
lang_id
,
lang_name
,
country
=
map
(
str
.
lower
,
lc
)
# check if query starts with language-id
if
lang_id
.
startswith
(
engine_query
):
if
len
(
engine_query
)
<=
2
:
results
.
append
(
':{lang_id}'
.
format
(
lang_id
=
lang_id
.
split
(
'_'
)[
0
]))
else
:
results
.
append
(
':{lang_id}'
.
format
(
lang_id
=
lang_id
))
# check if query starts with language name
if
lang_name
.
startswith
(
engine_query
):
results
.
append
(
':{lang_name}'
.
format
(
lang_name
=
lang_name
))
# check if query starts with country
if
country
.
startswith
(
engine_query
):
results
.
append
(
':{country}'
.
format
(
country
=
country
.
replace
(
' '
,
'_'
)))
# remove duplicates
result_set
=
set
(
results
)
# remove results which are already contained in the query
for
query_part
in
full_query
.
query_parts
:
if
query_part
in
result_set
:
result_set
.
remove
(
query_part
)
# convert result_set back to list
return
list
(
result_set
)
def
dbpedia
(
query
):
def
dbpedia
(
query
):
...
...
searx/query.py
View file @
4e2dae30
...
@@ -77,7 +77,7 @@ class Query(object):
...
@@ -77,7 +77,7 @@ class Query(object):
if
lang
==
lang_id
\
if
lang
==
lang_id
\
or
lang_id
.
startswith
(
lang
)
\
or
lang_id
.
startswith
(
lang
)
\
or
lang
==
lang_name
\
or
lang
==
lang_name
\
or
lang
==
country
:
or
lang
.
replace
(
'_'
,
' '
)
==
country
:
parse_next
=
True
parse_next
=
True
self
.
languages
.
append
(
lang
)
self
.
languages
.
append
(
lang
)
break
break
...
...
searx/webapp.py
View file @
4e2dae30
...
@@ -46,7 +46,7 @@ from searx.languages import language_codes
...
@@ -46,7 +46,7 @@ from searx.languages import language_codes
from
searx.https_rewrite
import
https_url_rewrite
from
searx.https_rewrite
import
https_url_rewrite
from
searx.search
import
Search
from
searx.search
import
Search
from
searx.query
import
Query
from
searx.query
import
Query
from
searx.autocomplete
import
backends
as
autocomplete_backends
from
searx.autocomplete
import
searx_bang
,
backends
as
autocomplete_backends
from
searx
import
logger
from
searx
import
logger
...
@@ -352,8 +352,11 @@ def autocompleter():
...
@@ -352,8 +352,11 @@ def autocompleter():
if
not
completer
:
if
not
completer
:
return
return
# parse searx specific autocompleter results like !bang
raw_results
=
searx_bang
(
query
)
# run autocompletion
# run autocompletion
raw_results
=
completer
(
query
.
getSearchQuery
(
))
raw_results
.
extend
(
completer
(
query
.
getSearchQuery
()
))
# parse results (write :language and !engine back to result string)
# parse results (write :language and !engine back to result string)
results
=
[]
results
=
[]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment