diff --git a/searx/plugins/__init__.py b/searx/plugins/__init__.py index 65174c21..60cf3e8a 100644 --- a/searx/plugins/__init__.py +++ b/searx/plugins/__init__.py @@ -34,6 +34,7 @@ from searx.plugins import (oa_doi_rewrite, self_info, hostname_replace, search_on_category_select, + search_operators, tracker_url_remover, vim_hotkeys) @@ -171,8 +172,10 @@ plugins.register(infinite_scroll) plugins.register(self_info) plugins.register(hostname_replace) plugins.register(search_on_category_select) +plugins.register(search_operators) plugins.register(tracker_url_remover) plugins.register(vim_hotkeys) + # load external plugins if 'plugins' in settings: plugins.register(*settings['plugins'], external=True) diff --git a/searx/plugins/search_operators.py b/searx/plugins/search_operators.py new file mode 100644 index 00000000..59125daf --- /dev/null +++ b/searx/plugins/search_operators.py @@ -0,0 +1,32 @@ +import shlex +import string + +from flask_babel import gettext + +name = gettext("Search operators") +description = gettext("""Filter results using hyphen, site: and -site:. +Please note that you might get less results with the additional filtering.""") +default_on = False + + +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