这是indexloc提供的服务,不要输入任何密码
Skip to content

Conversation

@return42
Copy link
Member

@return42 return42 commented Mar 24, 2025

The enabled_plugins: section in SearXNG's settings do no longer exists. There is no longer a distinction between built-in and external plugin, all plugins are registered via the settings in the plugins: section.

To understand plugin development compile documentation:

$ make docs.clean docs.live

and read http://0.0.0.0:8000/dev/plugins/development.html

In SearXNG, plugins can be registered via a fully qualified class name. A configuration (PluginCfg) can be transferred to the plugin, e.g. to activate it by default / opt-in or opt-out from user's point of view.

built-in plugins

The built-in plugins are all located in the namespace searx.plugins.

    plugins:

      searx.plugins.calculator.SXNGPlugin:
        active: true

      searx.plugins.hash_plugin.SXNGPlugin:
        active: true

      searx.plugins.self_info.SXNGPlugin:
        active: true

      searx.plugins.tracker_url_remover.SXNGPlugin:
        active: true

      searx.plugins.unit_converter.SXNGPlugin:
        active: true

      searx.plugins.ahmia_filter.SXNGPlugin:
        active: true

      searx.plugins.hostnames.SXNGPlugin:
        active: true

      searx.plugins.oa_doi_rewrite.SXNGPlugin:
        active: false

      searx.plugins.tor_check.SXNGPlugin:
        active: false

external plugins

SearXNG supports external plugins / there is no need to install one, SearXNG runs out of the box.

To get a developer installation in a SearXNG developer environment:

   $ git clone git@github.com:return42/tgwf-searx-plugins.git
   $ ./manage pyenv.cmd python -m \
         pip install -e tgwf-searx-plugins

To register the plugin in SearXNG add only_show_green_results.SXNGPlugin to the plugins: ...

    plugins:
      # ...
      only_show_green_results.SXNGPlugin:
        active: false

Result.filter_urls(..)

The Result.filter_urls(..) can be used to filter and/or modify URL fields. In the following example, the filter function my_url_filter:

   def my_url_filter(result, field_name, url_src) -> bool | str:
       if "google" in url_src:
           return False              # remove URL field from result
       if "facebook" in url_src:
           new_url = url_src.replace("facebook", "fb-dummy")
           return new_url            # return modified URL
       return True                   # leave URL in field unchanged

is applied to all URL fields in the Plugin.on_result hook:

   class MyUrlFilter(Plugin):
       ...
       def on_result(self, request, search, result) -> bool:
           result.filter_urls(my_url_filter)
           return True

Related

@return42 return42 force-pushed the mod-plugins branch 3 times, most recently from a79a984 to 5698e82 Compare March 25, 2025 14:35
@return42
Copy link
Member Author

@Bnyro finished my development phase ..

To understand plugin development compile documentation:

$ make docs.clean docs.live

and read http://0.0.0.0:8000/dev/plugins/development.html

Function searx.plugins.hostnames.filter_url_field(..) is used to filter URL fields by the hostnames plugin.

@Bnyro
Copy link
Member

Bnyro commented Mar 26, 2025

The filter_urls method seems like a good addition, I've been thinking about how to remove the duplicated logic in hostnames.py and that seems like a good solution.

@return42
Copy link
Member Author

The filter_urls method seems like a good addition, I've been thinking about how to remove the duplicated logic in hostnames.py and that seems like a good solution.

I think it is the most flexible solution ... if there are additional URL fields at some point, additional URL fields only have to be implemented in the loop of the Result class (the caller does not have to worry about the inner logic of the Result class and what are URL-fields and what fields not).

@return42
Copy link
Member Author

I fixed an issue; the Result.parsed_url hasn't been synced with the new_url in Result.url / I fixed that, see diff ..

Copy link
Member

@Bnyro Bnyro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@return42
Copy link
Member Author

LGTM!

Thanks for review / FYI I patched my instance with this PR .. just to see if there are any issues in production .. none seen so far ..

This patch brings two major changes:

- ``Result.filter_urls(..)`` to pass a filter function for URL fields
- The ``enabled_plugins:`` section in SearXNG's settings do no longer exists.

To understand plugin development compile documentation:

    $ make docs.clean docs.live

and read http://0.0.0.0:8000/dev/plugins/development.html

There is no longer a distinction between built-in and external plugin, all
plugins are registered via the settings in the ``plugins:`` section.

In SearXNG, plugins can be registered via a fully qualified class name.  A
configuration (`PluginCfg`) can be transferred to the plugin, e.g. to activate
it by default / *opt-in* or *opt-out* from user's point of view.

built-in plugins
================

The built-in plugins are all located in the namespace `searx.plugins`.

.. code:: yaml

    plugins:

      searx.plugins.calculator.SXNGPlugin:
        active: true

      searx.plugins.hash_plugin.SXNGPlugin:
        active: true

      searx.plugins.self_info.SXNGPlugin:
        active: true

      searx.plugins.tracker_url_remover.SXNGPlugin:
        active: true

      searx.plugins.unit_converter.SXNGPlugin:
        active: true

      searx.plugins.ahmia_filter.SXNGPlugin:
        active: true

      searx.plugins.hostnames.SXNGPlugin:
        active: true

      searx.plugins.oa_doi_rewrite.SXNGPlugin:
        active: false

      searx.plugins.tor_check.SXNGPlugin:
        active: false

external plugins
================

SearXNG supports *external plugins* / there is no need to install one, SearXNG
runs out of the box.

- Only show green hosted results: https://github.com/return42/tgwf-searx-plugins/

To get a developer installation in a SearXNG developer environment:

.. code:: sh

   $ git clone git@github.com:return42/tgwf-searx-plugins.git
   $ ./manage pyenv.cmd python -m \
         pip install -e tgwf-searx-plugins

To register the plugin in SearXNG add ``only_show_green_results.SXNGPlugin`` to
the ``plugins:``:

.. code:: yaml

    plugins:
      # ...
      only_show_green_results.SXNGPlugin:
        active: false

Result.filter_urls(..)
======================

The ``Result.filter_urls(..)`` can be used to filter and/or modify URL fields.
In the following example, the filter function ``my_url_filter``:

.. code:: python

   def my_url_filter(result, field_name, url_src) -> bool | str:
       if "google" in url_src:
           return False              # remove URL field from result
       if "facebook" in url_src:
           new_url = url_src.replace("facebook", "fb-dummy")
           return new_url            # return modified URL
       return True                   # leave URL in field unchanged

is applied to all URL fields in the :py:obj:`Plugin.on_result` hook:

.. code:: python

   class MyUrlFilter(Plugin):
       ...
       def on_result(self, request, search, result) -> bool:
           result.filter_urls(my_url_filter)
           return True

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
@return42 return42 merged commit 50f9277 into searxng:master Mar 29, 2025
9 checks passed
@return42 return42 deleted the mod-plugins branch March 29, 2025 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Links in the infobox are not modified by hostname_replace

2 participants