Answerer Development

The answerers give instant answers related to the search query, they usually provide answers of type Answer.

Here is an example of a very simple answerer that adds a “Hello” into the answer area:

from flask_babel import gettext as _
from searx.answerers import Answerer
from searx.result_types import Answer

class MyAnswerer(Answerer):

    keywords = [ "hello", "hello world" ]

    def info(self):
        return AnswererInfo(name=_("Hello"), description=_("lorem .."), keywords=self.keywords)

    def answer(self, request, search):
        return [ Answer(answer="Hello") ]

class searx.answerers.Answerer[source]

Abstract base class of answerers.

keywords: list[str]

Keywords to which the answerer has answers.

abstract answer(query: str) list[BaseAnswer][source]

Function that returns a list of answers to the question/query.

abstract info() AnswererInfo[source]

Informations about the answerer, see AnswererInfo.

class searx.answerers.AnswererInfo(name: str, description: str, examples: list[str], keywords: list[str])[source]

Object that holds informations about an answerer, these infos are shown to the user in the Preferences menu.

To be able to translate the information into other languages, the text must be written in English and translated with flask_babel.gettext.

name: str

Name of the answerer.

description: str

Short description of the answerer.

examples: list[str]

List of short examples of the usage / of query terms.

keywords: list[str]

See Answerer.keywords

class searx.answerers.AnswerStorage[source]

A storage for managing the answerers of SearXNG. With the AnswerStorage.ask” method, a caller can ask questions to all answerers and receives a list of the results.

answerer_list: set[Answerer]

The list of Answerer in this storage.

load_builtins()[source]

Loads answerer.py modules from the python packages in git://searx/answerers. The python modules are wrapped by ModuleAnswerer.

register_by_fqn(fqn: str)[source]

Register a Answerer via its fully qualified class namen(FQN).

register(answerer: Answerer)[source]

Register a Answerer.

ask(query: str) list[BaseAnswer][source]

An answerer is identified via keywords, if there is a keyword at the first position in the query for which there is one or more answerers, then these are called, whereby the entire query is passed as argument to the answerer function.

class searx.answerers._core.ModuleAnswerer(mod)[source]

Bases: Answerer

A wrapper class for legacy answerers where the names (keywords, answer, info) are implemented on the module level (not in a class).

Note

For internal use only!

answer(query: str) list[BaseAnswer][source]

Function that returns a list of answers to the question/query.

info() AnswererInfo[source]

Informations about the answerer, see AnswererInfo.