| 
							
							
 | 
						
						
						
						
							 | 
							
							.. _engines-dev:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							===============
 | 
						
						
						
						
							 | 
							
							Engine overview
 | 
						
						
						
						
							 | 
							
							===============
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							.. _metasearch-engine: https://en.wikipedia.org/wiki/Metasearch_engine
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							searx is a metasearch-engine_, so it uses different search engines to provide
 | 
						
						
						
						
							 | 
							
							better results.
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							Because there is no general search API which could be used for every search
 | 
						
						
						
						
							 | 
							
							engine, an adapter has to be built between searx and the external search
 | 
						
						
						
						
							 | 
							
							engines.  Adapters are stored under the folder :origin:`searx/engines`.
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							.. contents::
 | 
						
						
						
						
							 | 
							
							   :depth: 3
 | 
						
						
						
						
							 | 
							
							   :backlinks: entry
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							.. _general engine configuration:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							general engine configuration
 | 
						
						
						
						
							 | 
							
							============================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							It is required to tell searx the type of results the engine provides. The
 | 
						
						
						
						
							 | 
							
							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.
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							It does not matter if an option is stored in the engine file or in the
 | 
						
						
						
						
							 | 
							
							settings.  However, the standard way is the following:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							.. _engine file:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							engine file
 | 
						
						
						
						
							 | 
							
							-----------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							======================= =========== ========================================================
 | 
						
						
						
						
							 | 
							
							argument                type        information
 | 
						
						
						
						
							 | 
							
							======================= =========== ========================================================
 | 
						
						
						
						
							 | 
							
							categories              list        pages, in which the engine is working
 | 
						
						
						
						
							 | 
							
							paging                  boolean     support multible pages
 | 
						
						
						
						
							 | 
							
							language_support        boolean     support language choosing
 | 
						
						
						
						
							 | 
							
							time_range_support      boolean     support search time range
 | 
						
						
						
						
							 | 
							
							engine_type             str         ``online`` by default, other possibles values are 
 | 
						
						
						
						
							 | 
							
							                                    ``offline``, ``online_dictionnary``, ``online_currency``
 | 
						
						
						
						
							 | 
							
							======================= =========== ========================================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							.. _engine settings:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							settings.yml
 | 
						
						
						
						
							 | 
							
							------------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							======================= =========== =============================================
 | 
						
						
						
						
							 | 
							
							argument                type        information
 | 
						
						
						
						
							 | 
							
							======================= =========== =============================================
 | 
						
						
						
						
							 | 
							
							name                    string      name of search-engine
 | 
						
						
						
						
							 | 
							
							engine                  string      name of searx-engine
 | 
						
						
						
						
							 | 
							
							                                    (filename without ``.py``)
 | 
						
						
						
						
							 | 
							
							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}``)
 | 
						
						
						
						
							 | 
							
							======================= =========== =============================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							overrides
 | 
						
						
						
						
							 | 
							
							---------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							A few of the options have default values in the engine, but are often
 | 
						
						
						
						
							 | 
							
							overwritten by the settings.  If ``None`` is assigned to an option in the engine
 | 
						
						
						
						
							 | 
							
							file, it has to be redefined in the settings, otherwise searx will not start
 | 
						
						
						
						
							 | 
							
							with that engine.
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							The naming of overrides is arbitrary.  But the recommended overrides are the
 | 
						
						
						
						
							 | 
							
							following:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							======================= =========== ===========================================
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							======================= =========== ===========================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							example code
 | 
						
						
						
						
							 | 
							
							------------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							.. code:: python
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							   # engine dependent config
 | 
						
						
						
						
							 | 
							
							   categories = ['general']
 | 
						
						
						
						
							 | 
							
							   paging = True
 | 
						
						
						
						
							 | 
							
							   language_support = True
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							making a request
 | 
						
						
						
						
							 | 
							
							================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							To perform a search an URL have to be specified.  In addition to specifying an
 | 
						
						
						
						
							 | 
							
							URL, arguments can be passed to the query.
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							passed arguments
 | 
						
						
						
						
							 | 
							
							----------------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							These arguments can be used to construct the search query.  Furthermore,
 | 
						
						
						
						
							 | 
							
							parameters with default value can be redefined for special purposes.
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							If the ``engine_type`` is ``online```:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							====================== ============== ========================================================================
 | 
						
						
						
						
							 | 
							
							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``
 | 
						
						
						
						
							 | 
							
							pageno                 int            current pagenumber
 | 
						
						
						
						
							 | 
							
							language               str            specific language code like ``'en_US'``, or ``'all'`` if unspecified
 | 
						
						
						
						
							 | 
							
							====================== ============== ========================================================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							If the ``engine_type`` is ``online_dictionnary```, in addition to the ``online`` arguments:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							====================== ============ ========================================================================
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							====================== ============ ========================================================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							If the ``engine_type`` is ``online_currency```, in addition to the ``online`` arguments:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							====================== ============ ========================================================================
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							====================== ============ ========================================================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							parsed arguments
 | 
						
						
						
						
							 | 
							
							----------------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							The function ``def request(query, params):`` always returns the ``params``
 | 
						
						
						
						
							 | 
							
							variable.  Inside searx, the following paramters can be used to specify a search
 | 
						
						
						
						
							 | 
							
							request:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							=================== =========== ==========================================================================
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							=================== =========== ==========================================================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							example code
 | 
						
						
						
						
							 | 
							
							------------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							.. code:: python
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							   # search-url
 | 
						
						
						
						
							 | 
							
							   base_url = 'https://example.com/'
 | 
						
						
						
						
							 | 
							
							   search_string = 'search?{query}&page={page}'
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							   # do search-request
 | 
						
						
						
						
							 | 
							
							   def request(query, params):
 | 
						
						
						
						
							 | 
							
							       search_path = search_string.format(
 | 
						
						
						
						
							 | 
							
							           query=urlencode({'q': query}),
 | 
						
						
						
						
							 | 
							
							           page=params['pageno'])
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							       params['url'] = base_url + search_path
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							       return params
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							returned results
 | 
						
						
						
						
							 | 
							
							================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							Searx is able to return results of different media-types.  Currently the
 | 
						
						
						
						
							 | 
							
							following media-types are supported:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							- default_
 | 
						
						
						
						
							 | 
							
							- images_
 | 
						
						
						
						
							 | 
							
							- videos_
 | 
						
						
						
						
							 | 
							
							- torrent_
 | 
						
						
						
						
							 | 
							
							- map_
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							To set another media-type as default, the parameter ``template`` must be set to
 | 
						
						
						
						
							 | 
							
							the desired type.
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							default
 | 
						
						
						
						
							 | 
							
							-------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							images
 | 
						
						
						
						
							 | 
							
							------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							To use this template, the parameter:
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							result-parameter          information
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							template                  is set to ``images.html``
 | 
						
						
						
						
							 | 
							
							url                       string, url to the result site
 | 
						
						
						
						
							 | 
							
							title                     string, title of the result *(partly implemented)*
 | 
						
						
						
						
							 | 
							
							content                   *(partly implemented)*
 | 
						
						
						
						
							 | 
							
							publishedDate             :py:class:`datetime.datetime`,
 | 
						
						
						
						
							 | 
							
							                          time of publish *(partly implemented)*
 | 
						
						
						
						
							 | 
							
							img\_src                  string, url to the result image
 | 
						
						
						
						
							 | 
							
							thumbnail\_src            string, url to a small-preview image
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							videos
 | 
						
						
						
						
							 | 
							
							------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							torrent
 | 
						
						
						
						
							 | 
							
							-------
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							.. _magnetlink: https://en.wikipedia.org/wiki/Magnet_URI_scheme
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							map
 | 
						
						
						
						
							 | 
							
							---
 | 
						
						
						
						
							 | 
							
							
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							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
 | 
						
						
						
						
							 | 
							
							========================= =====================================================
 |