diff --git a/searx/plugins/__init__.py b/searx/plugins/__init__.py index c3aad5f32..278183314 100644 --- a/searx/plugins/__init__.py +++ b/searx/plugins/__init__.py @@ -210,6 +210,7 @@ class PluginStore: plugins = PluginStore() +plugins.register('./query_strings.py') def plugin_module_names(): yield_plugins = set() diff --git a/searx/plugins/query_strings.py b/searx/plugins/query_strings.py new file mode 100644 index 000000000..af0e31cc4 --- /dev/null +++ b/searx/plugins/query_strings.py @@ -0,0 +1,24 @@ +import shlex, string +from flask_babel import gettext + +name = gettext("query strings") +description = gettext('adds site:, - and "" to searx') +default_on = True + +def on_result(request, search, result): + q = search.search_query.query + qs = shlex.split(q) + spitems = [x.lower() for x in qs if ' ' in x] + mitems = [x.lower() for x in qs if x.startswith('-')] + siteitems = [x.lower() for x in qs if x.startswith('site:')] + msiteitems = [x.lower() for x in qs if x.startswith('-site:')] + url, title, content = result["url"].lower(), result["title"].lower(), (result.get("content").lower() if result.get("content") else '') + if all((x not in title or x not in content) for x in spitems): + return False + if all((x in title or x in content) for x in mitems): + return False + if all(x not in url for x in siteitems): + return False + if all(x in url for x in msiteitems): + return False + return True diff --git a/searx/settings.yml b/searx/settings.yml index 60d04bb0e..6ea913d4e 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -220,7 +220,8 @@ outgoing: # Comment or un-comment plugin to activate / deactivate by default. # -# enabled_plugins: +enabled_plugins: + - 'query strings' # # these plugins are enabled if nothing is configured .. # - 'Basic Calculator' # - 'Hash plugin'