2023-06-30 16:07:02 +00:00
|
|
|
.. _settings engine:
|
|
|
|
|
|
|
|
===========
|
|
|
|
``engine:``
|
|
|
|
===========
|
|
|
|
|
|
|
|
.. sidebar:: Further reading ..
|
|
|
|
|
|
|
|
- :ref:`configured engines`
|
|
|
|
- :ref:`engines-dev`
|
|
|
|
|
|
|
|
In the code example below a *full fledged* example of a YAML setup from a dummy
|
|
|
|
engine is shown. Most of the options have a default value or even are optional.
|
|
|
|
|
|
|
|
.. hint::
|
|
|
|
|
|
|
|
A few more options are possible, but they are pretty specific to some
|
|
|
|
engines (:ref:`engine implementations`).
|
|
|
|
|
|
|
|
.. code:: yaml
|
|
|
|
|
|
|
|
- name: example engine
|
|
|
|
engine: example
|
|
|
|
shortcut: demo
|
|
|
|
base_url: 'https://{language}.example.com/'
|
|
|
|
send_accept_language_header: false
|
|
|
|
categories: general
|
|
|
|
timeout: 3.0
|
|
|
|
api_key: 'apikey'
|
|
|
|
disabled: false
|
|
|
|
language: en_US
|
|
|
|
tokens: [ 'my-secret-token' ]
|
|
|
|
weight: 1
|
|
|
|
display_error_messages: true
|
|
|
|
about:
|
|
|
|
website: https://example.com
|
|
|
|
wikidata_id: Q306656
|
|
|
|
official_api_documentation: https://example.com/api-doc
|
|
|
|
use_official_api: true
|
|
|
|
require_api_key: true
|
|
|
|
results: HTML
|
|
|
|
|
|
|
|
# overwrite values from section 'outgoing:'
|
|
|
|
enable_http2: false
|
|
|
|
retries: 1
|
|
|
|
max_connections: 100
|
|
|
|
max_keepalive_connections: 10
|
|
|
|
keepalive_expiry: 5.0
|
|
|
|
using_tor_proxy: false
|
|
|
|
proxies:
|
|
|
|
http:
|
|
|
|
- http://proxy1:8080
|
|
|
|
- http://proxy2:8080
|
|
|
|
https:
|
|
|
|
- http://proxy1:8080
|
|
|
|
- http://proxy2:8080
|
|
|
|
- socks5://user:password@proxy3:1080
|
|
|
|
- socks5h://user:password@proxy4:1080
|
|
|
|
|
|
|
|
# other network settings
|
|
|
|
enable_http: false
|
|
|
|
retry_on_http_error: true # or 403 or [404, 429]
|
|
|
|
|
|
|
|
|
|
|
|
``name`` :
|
|
|
|
Name that will be used across SearXNG to define this engine. In settings, on
|
|
|
|
the result page...
|
|
|
|
|
|
|
|
``engine`` :
|
|
|
|
Name of the python file used to handle requests and responses to and from this
|
|
|
|
search engine.
|
|
|
|
|
|
|
|
``shortcut`` :
|
|
|
|
Code used to execute bang requests (in this case using ``!bi``)
|
|
|
|
|
|
|
|
``base_url`` : optional
|
|
|
|
Part of the URL that should be stable across every request. Can be useful to
|
|
|
|
use multiple sites using only one engine, or updating the site URL without
|
|
|
|
touching at the code.
|
|
|
|
|
|
|
|
``send_accept_language_header`` :
|
|
|
|
Several engines that support languages (or regions) deal with the HTTP header
|
|
|
|
``Accept-Language`` to build a response that fits to the locale. When this
|
|
|
|
option is activated, the language (locale) that is selected by the user is used
|
|
|
|
to build and send a ``Accept-Language`` header in the request to the origin
|
|
|
|
search engine.
|
|
|
|
|
|
|
|
.. _engine categories:
|
|
|
|
|
|
|
|
``categories`` : optional
|
|
|
|
Specifies to which categories the engine should be added. Engines can be
|
|
|
|
assigned to multiple categories.
|
|
|
|
|
|
|
|
Categories can be shown as tabs (:ref:`settings categories_as_tabs`) in the
|
|
|
|
UI. A search in a tab (in the UI) will query all engines that are active in
|
|
|
|
this tab. In the preferences page (``/preferences``) -- under *engines* --
|
|
|
|
users can select what engine should be active when querying in this tab.
|
|
|
|
|
|
|
|
Alternatively, :ref:`\!bang <search-syntax>` can be used to search all engines
|
|
|
|
in a category, regardless of whether they are active or not, or whether they
|
|
|
|
are in a tab of the UI or not. For example, ``!dictionaries`` can be used to
|
|
|
|
query all search engines in that category (group).
|
|
|
|
|
|
|
|
``timeout`` : optional
|
|
|
|
Timeout of the search with the current search engine. Overwrites
|
|
|
|
``request_timeout`` from :ref:`settings outgoing`. **Be careful, it will
|
|
|
|
modify the global timeout of SearXNG.**
|
|
|
|
|
|
|
|
``api_key`` : optional
|
|
|
|
In a few cases, using an API needs the use of a secret key. How to obtain them
|
|
|
|
is described in the file.
|
|
|
|
|
|
|
|
``disabled`` : optional
|
|
|
|
To disable by default the engine, but not deleting it. It will allow the user
|
|
|
|
to manually activate it in the settings.
|
|
|
|
|
|
|
|
``inactive``: optional
|
|
|
|
Remove the engine from the settings (*disabled & removed*).
|
|
|
|
|
|
|
|
``language`` : optional
|
|
|
|
If you want to use another language for a specific engine, you can define it
|
|
|
|
by using the ISO code of language (and region), like ``fr``, ``en-US``,
|
|
|
|
``de-DE``.
|
|
|
|
|
|
|
|
``tokens`` : optional
|
|
|
|
A list of secret tokens to make this engine *private*, more details see
|
|
|
|
:ref:`private engines`.
|
|
|
|
|
|
|
|
``weight`` : default ``1``
|
|
|
|
Weighting of the results of this engine.
|
|
|
|
|
|
|
|
``display_error_messages`` : default ``true``
|
|
|
|
When an engine returns an error, the message is displayed on the user interface.
|
|
|
|
|
|
|
|
``network`` : optional
|
|
|
|
Use the network configuration from another engine.
|
|
|
|
In addition, there are two default networks:
|
|
|
|
|
|
|
|
- ``ipv4`` set ``local_addresses`` to ``0.0.0.0`` (use only IPv4 local addresses)
|
|
|
|
- ``ipv6`` set ``local_addresses`` to ``::`` (use only IPv6 local addresses)
|
|
|
|
|
|
|
|
``enable_http`` : optional
|
|
|
|
Enable HTTP for this engine (by default only HTTPS is enabled).
|
|
|
|
|
|
|
|
``retry_on_http_error`` : optional
|
|
|
|
Retry request on some HTTP status code.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
* ``true`` : on HTTP status code between 400 and 599.
|
|
|
|
* ``403`` : on HTTP status code 403.
|
|
|
|
* ``[403, 429]``: on HTTP status code 403 and 429.
|
|
|
|
|
|
|
|
``proxies`` :
|
|
|
|
Overwrites proxy settings from :ref:`settings outgoing`.
|
|
|
|
|
|
|
|
``using_tor_proxy`` :
|
|
|
|
Using tor proxy (``true``) or not (``false``) for this engine. The default is
|
|
|
|
taken from ``using_tor_proxy`` of the :ref:`settings outgoing`.
|
|
|
|
|
|
|
|
.. _Pool limit configuration: https://www.python-httpx.org/advanced/#pool-limit-configuration
|
|
|
|
|
|
|
|
``max_keepalive_connection#s`` :
|
|
|
|
`Pool limit configuration`_, overwrites value ``pool_maxsize`` from
|
|
|
|
:ref:`settings outgoing` for this engine.
|
|
|
|
|
|
|
|
``max_connections`` :
|
|
|
|
`Pool limit configuration`_, overwrites value ``pool_connections`` from
|
|
|
|
:ref:`settings outgoing` for this engine.
|
|
|
|
|
|
|
|
``keepalive_expiry`` :
|
|
|
|
`Pool limit configuration`_, overwrites value ``keepalive_expiry`` from
|
|
|
|
:ref:`settings outgoing` for this engine.
|
|
|
|
|
|
|
|
|
|
|
|
.. _private engines:
|
|
|
|
|
|
|
|
Private Engines (``tokens``)
|
|
|
|
============================
|
|
|
|
|
|
|
|
Administrators might find themselves wanting to limit access to some of the
|
|
|
|
enabled engines on their instances. It might be because they do not want to
|
|
|
|
expose some private information through :ref:`offline engines`. Or they would
|
|
|
|
rather share engines only with their trusted friends or colleagues.
|
|
|
|
|
|
|
|
.. sidebar:: info
|
|
|
|
|
|
|
|
Initial sponsored by `Search and Discovery Fund
|
|
|
|
<https://nlnet.nl/discovery>`_ of `NLnet Foundation <https://nlnet.nl/>`_.
|
|
|
|
|
|
|
|
To solve this issue the concept of *private engines* exists.
|
|
|
|
|
|
|
|
A new option was added to engines named `tokens`. It expects a list of strings.
|
|
|
|
If the user making a request presents one of the tokens of an engine, they can
|
|
|
|
access information about the engine and make search requests.
|
|
|
|
|
|
|
|
Example configuration to restrict access to the Arch Linux Wiki engine:
|
|
|
|
|
|
|
|
.. code:: yaml
|
|
|
|
|
|
|
|
- name: arch linux wiki
|
|
|
|
engine: archlinux
|
|
|
|
shortcut: al
|
|
|
|
tokens: [ 'my-secret-token' ]
|
|
|
|
|
|
|
|
Unless a user has configured the right token, the engine is going to be hidden
|
2024-06-13 02:24:18 +00:00
|
|
|
from them. It is not going to be included in the list of engines on the
|
2023-06-30 16:07:02 +00:00
|
|
|
Preferences page and in the output of `/config` REST API call.
|
|
|
|
|
|
|
|
Tokens can be added to one's configuration on the Preferences page under "Engine
|
|
|
|
tokens". The input expects a comma separated list of strings.
|
|
|
|
|
|
|
|
The distribution of the tokens from the administrator to the users is not carved
|
|
|
|
in stone. As providing access to such engines implies that the admin knows and
|
|
|
|
trusts the user, we do not see necessary to come up with a strict process.
|
|
|
|
Instead, we would like to add guidelines to the documentation of the feature.
|
|
|
|
|
|
|
|
|
|
|
|
Example: Multilingual Search
|
|
|
|
============================
|
|
|
|
|
|
|
|
SearXNG does not support true multilingual search. You have to use the language
|
|
|
|
prefix in your search query when searching in a different language.
|
|
|
|
|
|
|
|
But there is a workaround: By adding a new search engine with a different
|
|
|
|
language, SearXNG will search in your default and other language.
|
|
|
|
|
|
|
|
Example configuration in settings.yml for a German and English speaker:
|
|
|
|
|
|
|
|
.. code-block:: yaml
|
|
|
|
|
|
|
|
search:
|
|
|
|
default_lang : "de"
|
|
|
|
...
|
|
|
|
|
|
|
|
engines:
|
|
|
|
- name : google english
|
|
|
|
engine : google
|
|
|
|
language : en
|
|
|
|
...
|
|
|
|
|
|
|
|
When searching, the default google engine will return German results and
|
|
|
|
"google english" will return English results.
|
|
|
|
|