2019-12-12 19:20:56 +01:00
.. _engines-dev:
===============
2021-06-03 18:53:00 +02:00
Engine Overview
2015-11-28 19:26:45 +01:00
===============
2023-06-30 18:07:02 +02:00
.. contents ::
:depth: 3
:local:
:backlinks: entry
2019-12-12 19:20:56 +01:00
.. _metasearch-engine: https://en.wikipedia.org/wiki/Metasearch_engine
2015-11-28 19:26:45 +01:00
2021-06-03 18:53:00 +02:00
.. sidebar :: Further reading ..
2015-11-28 19:26:45 +01:00
2021-06-04 11:29:58 +02:00
- :ref: `configured engines`
2021-06-03 18:53:00 +02:00
- :ref: `settings engine`
2015-11-28 19:26:45 +01:00
2021-09-12 08:36:56 +02:00
SearXNG is a metasearch-engine_, so it uses different search engines to provide
2021-06-03 18:53:00 +02:00
better results.
Because there is no general search API which could be used for every search
2021-09-12 08:36:56 +02:00
engine, an adapter has to be built between SearXNG and the external search
2021-06-03 18:53:00 +02:00
engines. Adapters are stored under the folder :origin: `searx/engines` .
2020-11-30 08:35:15 +01:00
.. _general engine configuration:
2021-06-03 18:53:00 +02:00
General Engine Configuration
2019-12-12 19:20:56 +01:00
============================
2015-11-28 19:26:45 +01:00
2021-09-12 08:36:56 +02:00
It is required to tell SearXNG the type of results the engine provides. The
2021-06-03 18:53:00 +02:00
arguments can be set in the engine file or in the settings file (normally
`` settings.yml `` ). The arguments in the settings file override the ones in the
engine file.
2015-11-28 19:26:45 +01:00
2021-06-03 18:53:00 +02:00
It does not matter if an option is stored in the engine file or in the settings.
However, the standard way is the following:
2015-11-28 19:26:45 +01:00
2019-12-21 17:13:38 +01:00
.. _engine file:
2015-11-28 19:26:45 +01:00
2021-06-03 18:53:00 +02:00
Engine File
2019-12-12 19:20:56 +01:00
-----------
2021-06-03 18:53:00 +02:00
.. table :: Common options in the engine module
:width: 100%
======================= =========== ========================================================
argument type information
======================= =========== ========================================================
2022-07-24 10:51:22 +02:00
categories list categories, in which the engine is working
2022-09-27 17:01:00 +02:00
paging boolean support multiple pages
2021-06-03 18:53:00 +02:00
time_range_support boolean support search time range
2024-10-15 11:15:47 +02:00
license_filter_support boolean support search with content license filter
2023-06-30 18:07:02 +02:00
engine_type str - `` online `` :ref: `[ref] <online engines>` by
2021-06-03 18:53:00 +02:00
default, other possibles values are:
- `` offline `` :ref: `[ref] <offline engines>`
2023-06-30 18:07:02 +02:00
- `` online_dictionary `` :ref: `[ref] <online dictionary>`
- `` online_currency `` :ref: `[ref] <online currency>`
- `` online_url_search `` :ref: `[ref] <online url search>`
2021-06-03 18:53:00 +02:00
======================= =========== ========================================================
2019-12-12 19:20:56 +01:00
2019-12-21 17:13:38 +01:00
.. _engine settings:
2015-11-28 19:26:45 +01:00
2021-06-03 18:53:00 +02:00
Engine `` settings.yml ``
-----------------------
For a more detailed description, see :ref: `settings engine` in the :ref: `settings.yml` .
.. table :: Common options in the engine setup (`` settings.yml `` )
:width: 100%
2022-06-14 10:02:50 +02:00
======================= =========== ==================================================
2021-06-03 18:53:00 +02:00
argument type information
2022-06-14 10:02:50 +02:00
======================= =========== ==================================================
2021-06-03 18:53:00 +02:00
name string name of search-engine
2022-06-14 10:02:50 +02:00
engine string name of searxng-engine (file name without `` .py `` )
2021-06-03 18:53:00 +02:00
enable_http bool enable HTTP (by default only HTTPS is enabled).
shortcut string shortcut of search-engine
timeout string specific timeout for search-engine
display_error_messages boolean display error messages on the web UI
proxies dict set proxies for a specific engine
(e.g. `` proxies : {http: socks5://proxy:port,
https: socks5://proxy:port}`` )
2022-06-14 10:02:50 +02:00
======================= =========== ==================================================
2021-06-03 18:53:00 +02:00
.. _engine overrides:
Overrides
2019-12-12 19:20:56 +01:00
---------
2023-09-15 09:53:03 +02:00
A few of the options have default values in the namespace of the engine's python
module, but are often overwritten by the settings. If `` None `` is assigned to an
2021-06-03 18:53:00 +02:00
option in the engine file, it has to be redefined in the settings, otherwise
2021-09-12 08:36:56 +02:00
SearXNG will not start with that engine (global names with a leading underline can
2021-06-09 15:16:59 +02:00
be `` None `` ).
2015-12-01 15:32:06 +01:00
2021-06-03 18:53:00 +02:00
Here is an very simple example of the global names in the namespace of engine's
module:
2015-11-28 19:26:45 +01:00
.. code :: python
2019-12-12 19:20:56 +01:00
# engine dependent config
categories = ['general']
paging = True
2021-06-03 18:53:00 +02:00
_non_overwritten_global = 'foo'
2019-12-12 19:20:56 +01:00
2021-06-03 18:53:00 +02:00
.. table :: The naming of overrides is arbitrary / recommended overrides are:
:width: 100%
======================= =========== ===========================================
argument type information
======================= =========== ===========================================
base_url string base-url, can be overwritten to use same
engine on other URL
number_of_results int maximum number of results per request
language string ISO code of language and country like en_US
api_key string api-key if required by engine
======================= =========== ===========================================
2015-11-28 19:26:45 +01:00
2021-05-23 10:56:29 +02:00
.. _engine request:
2021-06-03 18:53:00 +02:00
Making a Request
2019-12-12 19:20:56 +01:00
================
2015-11-28 19:26:45 +01:00
2019-12-12 19:20:56 +01:00
To perform a search an URL have to be specified. In addition to specifying an
URL, arguments can be passed to the query.
2015-11-28 19:26:45 +01:00
2021-06-03 18:53:00 +02:00
.. _engine request arguments:
Passed Arguments (request)
--------------------------
2015-11-28 19:26:45 +01:00
2019-12-12 19:20:56 +01:00
These arguments can be used to construct the search query. Furthermore,
2015-12-01 15:32:06 +01:00
parameters with default value can be redefined for special purposes.
2015-11-28 19:26:45 +01:00
2022-09-29 20:54:46 +02:00
.. _engine request online:
2019-12-12 19:20:56 +01:00
2022-09-29 20:54:46 +02:00
.. table :: If the `` engine_type `` is :py:obj:`online
<searx.search.processors.online.OnlineProcessor.get_params>`
2021-06-03 18:53:00 +02:00
:width: 100%
====================== ============== ========================================================================
argument type default-value, information
====================== ============== ========================================================================
url str `` '' ``
method str `` 'GET' ``
headers set `` {} ``
data set `` {} ``
cookies set `` {} ``
verify bool `` True ``
headers.User-Agent str a random User-Agent
category str current category, like `` 'general' ``
safesearch int `` 0 `` , between `` 0 `` and `` 2 `` (normal, moderate, strict)
time_range Optional[str] `` None `` , can be `` day `` , `` week `` , `` month `` , `` year ``
2024-10-15 11:15:47 +02:00
license_filter Optional[str] `` None `` , can be `` public `` (copyleft content), `` freetouse `` (Free to share, modify and use), `` commercial `` (not allowed to use without further permission by the creator)
2021-06-03 18:53:00 +02:00
pageno int current pagenumber
2022-09-29 20:54:46 +02:00
searxng_locale str SearXNG's locale selected by user. Specific language code like
`` 'en' `` , `` 'en-US' `` , or `` 'all' `` if unspecified.
2021-06-03 18:53:00 +02:00
====================== ============== ========================================================================
2022-09-29 20:54:46 +02:00
.. _engine request online_dictionary:
.. table :: If the `` engine_type `` is :py:obj:`online_dictionary
<searx.search.processors.online_dictionary.OnlineDictionaryProcessor.get_params>`,
in addition to the :ref: `online <engine request online>` arguments:
2021-06-03 18:53:00 +02:00
:width: 100%
====================== ============== ========================================================================
argument type default-value, information
====================== ============== ========================================================================
from_lang str specific language code like `` 'en_US' ``
to_lang str specific language code like `` 'en_US' ``
query str the text query without the languages
====================== ============== ========================================================================
2022-09-29 20:54:46 +02:00
.. _engine request online_currency:
.. table :: If the `` engine_type `` is :py:obj:`online_currency
<searx.search.processors.online_currency.OnlineCurrencyProcessor.get_params>`,
in addition to the :ref: `online <engine request online>` arguments:
2021-06-03 18:53:00 +02:00
:width: 100%
====================== ============== ========================================================================
argument type default-value, information
====================== ============== ========================================================================
amount float the amount to convert
from str ISO 4217 code
to str ISO 4217 code
from_name str currency name
to_name str currency name
====================== ============== ========================================================================
2022-09-29 20:54:46 +02:00
.. _engine request online_url_search:
.. table :: If the `` engine_type `` is :py:obj:`online_url_search
<searx.search.processors.online_url_search.OnlineUrlSearchProcessor.get_params>`,
in addition to the :ref: `online <engine request online>` arguments:
:width: 100%
====================== ============== ========================================================================
argument type default-value, information
====================== ============== ========================================================================
search_url dict URLs from the search query:
.. code :: python
{
'http': str,
'ftp': str,
'data:image': str
}
====================== ============== ========================================================================
2021-06-03 18:53:00 +02:00
Specify Request
---------------
The function :py:func:`def request(query, params):
<searx.engines.demo_online.request> ` always returns the ` `params` ` variable, the
following parameters can be used to specify a search request:
.. table ::
:width: 100%
=================== =========== ==========================================================================
argument type information
=================== =========== ==========================================================================
url str requested url
method str HTTP request method
headers set HTTP header information
data set HTTP data information
cookies set HTTP cookies
verify bool Performing SSL-Validity check
allow_redirects bool Follow redirects
max_redirects int maximum redirects, hard limit
soft_max_redirects int maximum redirects, soft limit. Record an error but don't stop the engine
raise_for_httperror bool True by default: raise an exception if the HTTP code of response is >= 300
=================== =========== ==========================================================================
2015-11-28 19:26:45 +01:00
2021-05-23 10:56:29 +02:00
.. _engine results:
2021-06-03 18:53:00 +02:00
.. _engine media types:
2023-06-30 18:07:02 +02:00
Result Types (`` template `` )
===========================
2021-06-03 18:53:00 +02:00
Each result item of an engine can be of different media-types. Currently the
2023-06-30 18:07:02 +02:00
following media-types are supported. To set another media-type as
:ref: `template default` , the parameter `` template `` must be set to the desired
type.
.. _template default:
`` default ``
-----------
2021-06-03 18:53:00 +02:00
.. table :: Parameter of the **default** media type:
:width: 100%
========================= =====================================================
result-parameter information
========================= =====================================================
url string, url of the result
title string, title of the result
content string, general result-text
publishedDate :py:class: `datetime.datetime` , time of publish
========================= =====================================================
2023-06-30 18:07:02 +02:00
.. _template images:
`` images ``
----------
2024-02-20 10:51:58 +01:00
.. list-table :: Parameter of the **images** media type
:header-rows: 2
2021-06-03 18:53:00 +02:00
:width: 100%
2024-02-20 10:51:58 +01:00
* - result-parameter
- Python type
- information
* - template
- :py:class: `str`
- is set to `` images.html ``
* - url
- :py:class: `str`
- url to the result site
* - title
- :py:class: `str`
- title of the result
* - content
- :py:class: `str`
- description of the image
* - publishedDate
- :py:class: `datetime <datetime.datetime>`
- time of publish
* - img_src
- :py:class: `str`
- url to the result image
* - thumbnail_src
- :py:class: `str`
- url to a small-preview image
* - resolution
- :py:class: `str`
- the resolution of the image (e.g. `` 1920 x 1080 `` pixel)
* - img_format
- :py:class: `str`
- the format of the image (e.g. `` png `` )
* - filesize
- :py:class: `str`
- size of bytes in :py:obj: `human readable <searx.humanize_bytes>` notation
(e.g. `` MB `` for 1024 \* 1024 Bytes filesize).
2021-06-03 18:53:00 +02:00
2023-06-30 18:07:02 +02:00
.. _template videos:
`` videos ``
----------
2021-06-03 18:53:00 +02:00
.. table :: Parameter of the **videos** media type:
:width: 100%
========================= =====================================================
result-parameter information
------------------------- -----------------------------------------------------
template is set to `` videos.html ``
========================= =====================================================
url string, url of the result
title string, title of the result
content *(not implemented yet)*
publishedDate :py:class: `datetime.datetime` , time of publish
thumbnail string, url to a small-preview image
2024-07-20 21:30:27 +02:00
length :py:class: `datetime.timedelta` , duration of result
views string, view count in humanized number format
2021-06-03 18:53:00 +02:00
========================= =====================================================
2019-12-12 19:20:56 +01:00
2023-06-30 18:07:02 +02:00
.. _template torrent:
`` torrent ``
-----------
2019-12-12 19:20:56 +01:00
.. _magnetlink: https://en.wikipedia.org/wiki/Magnet_URI_scheme
2021-06-03 18:53:00 +02:00
.. table :: Parameter of the **torrent** media type:
:width: 100%
========================= =====================================================
result-parameter information
------------------------- -----------------------------------------------------
template is set to `` torrent.html ``
========================= =====================================================
url string, url of the result
title string, title of the result
content string, general result-text
publishedDate :py:class: `datetime.datetime` ,
time of publish *(not implemented yet)*
seed int, number of seeder
leech int, number of leecher
filesize int, size of file in bytes
files int, number of files
magnetlink string, magnetlink_ of the result
torrentfile string, torrentfile of the result
========================= =====================================================
2023-06-30 18:07:02 +02:00
.. _template map:
`` map ``
-------
2021-06-03 18:53:00 +02:00
.. table :: Parameter of the **map** media type:
:width: 100%
========================= =====================================================
result-parameter information
------------------------- -----------------------------------------------------
template is set to `` map.html ``
========================= =====================================================
url string, url of the result
title string, title of the result
content string, general result-text
publishedDate :py:class: `datetime.datetime` , time of publish
latitude latitude of result (in decimal format)
longitude longitude of result (in decimal format)
boundingbox boundingbox of result (array of 4. values
`` [lat-min, lat-max, lon-min, lon-max] `` )
geojson geojson of result (https://geojson.org/)
osm.type type of osm-object (if OSM-Result)
osm.id id of osm-object (if OSM-Result)
address.name name of object
address.road street name of object
address.house_number house number of object
address.locality city, place of object
address.postcode postcode of object
address.country country of object
========================= =====================================================
2022-09-18 14:52:54 +02:00
2023-06-30 18:07:02 +02:00
.. _template paper:
`` paper ``
---------
2022-09-18 14:52:54 +02:00
.. _BibTeX format: https://www.bibtex.com/g/bibtex-format/
.. _BibTeX field types: https://en.wikipedia.org/wiki/BibTeX#Field_types
.. list-table :: Parameter of the **paper** media type /
see `BibTeX field types`_ and `BibTeX format`_
:header-rows: 2
:width: 100%
* - result-parameter
- Python type
- information
* - template
- :py:class: `str`
- is set to `` paper.html ``
* - title
- :py:class: `str`
- title of the result
* - content
- :py:class: `str`
- abstract
* - comments
- :py:class: `str`
- free text display in italic below the content
* - tags
- :py:class: `List <list>` \ [\ :py:class: `str` \ ]
- free tag list
* - publishedDate
- :py:class: `datetime <datetime.datetime>`
- last publication date
2022-09-24 10:56:07 +02:00
* - type
- :py:class: `str`
- short description of medium type, e.g. *book* , *pdf* or *html* ...
2022-09-18 14:52:54 +02:00
* - authors
- :py:class: `List <list>` \ [\ :py:class: `str` \ ]
- list of authors of the work (authors with a "s")
* - editor
- :py:class: `str`
- list of editors of a book
* - publisher
- :py:class: `str`
- name of the publisher
* - journal
- :py:class: `str`
- name of the journal or magazine the article was
published in
* - volume
- :py:class: `str`
- volume number
2022-09-23 19:58:14 +02:00
* - pages
- :py:class: `str`
- page range where the article is
2022-09-18 14:52:54 +02:00
* - number
- :py:class: `str`
- number of the report or the issue number for a journal article
* - doi
- :py:class: `str`
- DOI number (like `` 10.1038/d41586-018-07848-2 `` )
* - issn
2022-09-25 15:46:29 +02:00
- :py:class: `List <list>` \ [\ :py:class: `str` \ ]
2022-09-18 14:52:54 +02:00
- ISSN number like `` 1476-4687 ``
* - isbn
2022-09-25 15:46:29 +02:00
- :py:class: `List <list>` \ [\ :py:class: `str` \ ]
2022-09-18 14:52:54 +02:00
- ISBN number like `` 9780201896831 ``
* - pdf_url
- :py:class: `str`
- URL to the full article, the PDF version
* - html_url
- :py:class: `str`
- URL to full article, HTML version
2023-06-30 18:07:02 +02:00
2024-02-19 21:06:26 +01:00
.. _template packages:
`` packages ``
------------
.. list-table :: Parameter of the **packages** media type
:header-rows: 2
:width: 100%
* - result-parameter
- Python type
- information
* - template
- :py:class: `str`
- is set to `` packages.html ``
* - title
- :py:class: `str`
- title of the result
* - content
- :py:class: `str`
- abstract
* - package_name
- :py:class: `str`
- the name of the package
* - version
- :py:class: `str`
- the current version of the package
* - maintainer
- :py:class: `str`
- the maintainer or author of the project
* - publishedDate
- :py:class: `datetime <datetime.datetime>`
- date of latest update or release
* - tags
- :py:class: `List <list>` \ [\ :py:class: `str` \ ]
- free tag list
* - popularity
- :py:class: `str`
- the popularity of the package, e.g. rating or download count
* - license_name
- :py:class: `str`
- the name of the license
* - license_url
- :py:class: `str`
- the web location of a license copy
* - homepage
- :py:class: `str`
- the url of the project's homepage
* - source_code_url
- :py:class: `str`
- the location of the project's source code
2024-05-06 08:33:24 +02:00
* - links
- :py:class: `dict`
- additional links in the form of `` {'link_name': 'http://example.com'} ``