docker项目-搭建个人搜索引擎SearXNG

这篇具有很好参考价值的文章主要介绍了docker项目-搭建个人搜索引擎SearXNG。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

docker项目-搭建个人搜索引擎SearXNG

SearXNG简介

SearXNG是一个免费的互联网元搜索引擎,它汇总了来自更多 超过 70 个搜索服务。

文档地址:https://docs.searxng.org/

github地址:https://github.com/searxng/searxng

Dokcer仓库:https://github.com/searxng/searxng-docker

演示Dome:https://searx.space/#

部署需求

Vps:一台,建议国外vps
系统:任意linux发行版,本文采用rocky
容器:docker
个人域名,带ssl证书

搭建过程

安装docker

yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y

启动docker

systemctl enable docker --now

安装docker-compose

curl -L https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose

Git SearXNG项目

安装git
yum install git -y
建立项目目录
mkdir /data
克隆项目
cd /data
git clone https://github.com/searxng/searxng-docker.git
配置docker-compose

本次安装不采用caddy容器做代理,采用本地nginx做代理,因此注释掉caddy容器内容。

version: '3.7'

services:

        #  caddy:
        #    container_name: caddy
        #    image: caddy:2-alpine
        #    network_mode: host
        #    volumes:
        #      - ./Caddyfile:/etc/caddy/Caddyfile:ro
        #      - caddy-data:/data:rw
        #      - caddy-config:/config:rw
        #    environment:
        #      - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost:80}
        #      - SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal}
        #    cap_drop:
        #      - ALL
        #    cap_add:
        #      - NET_BIND_SERVICE
        #      - DAC_OVERRIDE

  redis:
    container_name: redis
    image: "redis:alpine"
    command: redis-server --save "" --appendonly "no"
    networks:
      - searxng
    tmpfs:
      - /var/lib/redis
    cap_drop:
      - ALL
    cap_add:
      - SETGID
      - SETUID
      - DAC_OVERRIDE

  searxng:
    container_name: searxng
    image: searxng/searxng:latest
    networks:
      - searxng
    ports:
     - "127.0.0.1:8080:8080"
    volumes:
      - ./searxng:/etc/searxng:rw
    environment:
      - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"
networks:
  searxng:
    ipam:
      driver: default

volumes:
  caddy-data:
  caddy-config:
配置env文件
cd /data/searxng-docker
vim .env
/data/searxng-docker
[root@racknerd-944314 searxng-docker]# cat .env
# By default listen on https://localhost
# To change this:
# * uncomment SEARXNG_HOSTNAME, and replace <host> by the SearXNG hostname
# * uncomment LETSENCRYPT_EMAIL, and replace <email> by your email (require to create a Let's Encrypt certificate)

SEARXNG_HOSTNAME=www.xxx.xx
# LETSENCRYPT_EMAIL=<email>

将SEARXNG_HOSTNAME修改为域名

配置settings.yml文件
cd /data/searxng-docker/searxng
生成secret_key秘钥
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml
解决打开域名“too many requests”
limiter: false
添加engines配置,解决google引擎 “too many requests”
engines:
  - name: google
    engine: google
    shortcut: go
    use_mobile_ui: true

  - name: google images
    engine: google_images
    use_mobile_ui: true

  - name: google news
    engine: google_news
    use_mobile_ui: true

  - name: google videos
    engine: google_videos
    use_mobile_ui: true

  - name: google scholar
    engine: google_scholar
    use_mobile_ui: true

  - name: google play apps
    engine: google_play_apps
    use_mobile_ui: true
完整settings.yml文件配置
# see https://docs.searxng.org/admin/engines/settings.html#use-default-settings
use_default_settings: true
server:
  # base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml
  secret_key: "3af379c948a8dfc252bc57f115c08c2f1ef7eaeab44a079082a9edd92d3d34ae"  # change this!
  limiter: false  # can be disabled for a private instance
  image_proxy: true
ui:
  static_use_hash: true
redis:
  url: redis://redis:6379/0
engines:
  - name: google
    engine: google
    shortcut: go
    use_mobile_ui: true

  - name: google images
    engine: google_images
    use_mobile_ui: true

  - name: google news
    engine: google_news
    use_mobile_ui: true

  - name: google videos
    engine: google_videos
    use_mobile_ui: true

  - name: google scholar
    engine: google_scholar
    use_mobile_ui: true

  - name: google play apps
    engine: google_play_apps
    use_mobile_ui: true
根据docker-compose生成容器
cd /data/searxng-docker/
docker-compose up -d
配置Nginx代理
安装nginx

通过二进制或者yum安装,本文采用二进制安装。

配置nginx

将https的443端口,代理转发到searxng容器的8080端口

vim nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       443 ssl;
        server_name  www.xxx.xx; #你的域名

        ssl_certificate      xxx.xx.pem; #域名证书
        ssl_certificate_key  xxx.xx.key; #域名秘钥

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL;
        ssl_prefer_server_ciphers  on;
        location / {
              root html;
              index index.html index.htm;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header Host $http_host;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header Range $http_range;
               proxy_set_header If-Range $http_if_range;
               proxy_redirect off;
               proxy_pass http://127.0.0.1:8080;
         }
    }
}
访问域名验证

访问域名https://www.xxx.xx

searxng,docker,docker,容器文章来源地址https://www.toymoban.com/news/detail-792233.html

更新和卸载

更新

#进入项目目录
cd /data/searxng-docker
#拉取最新镜像
docker-compose pull
#更新
docker-compose up -d

卸载

#进入项目
cd /data/searxng-docker
#停止容器,不会删除本地映射数据
docker-compose down
#完全删除本地数据
rm -rf /data/searxng-docker

官方settings.yaml配置模板

general:
  # Debug mode, only for development
  debug: false
  # displayed name
  instance_name: "SearXNG"
  # For example: https://example.com/privacy
  privacypolicy_url: false
  # use true to use your own donation page written in searx/info/en/donate.md
  # use false to disable the donation link
  donation_url: https://docs.searxng.org/donate.html
  # mailto:contact@example.com
  contact_url: false
  # record stats
  enable_metrics: true

brand:
  new_issue_url: https://github.com/searxng/searxng/issues/new
  docs_url: https://docs.searxng.org/
  public_instances: https://searx.space
  wiki_url: https://github.com/searxng/searxng/wiki
  issue_url: https://github.com/searxng/searxng/issues

search:
  # Filter results. 0: None, 1: Moderate, 2: Strict
  safe_search: 0
  # Existing autocomplete backends: "dbpedia", "duckduckgo", "google", "yandex",
  # "seznam", "startpage", "swisscows", "qwant", "wikipedia" - leave blank to turn it off
  # by default.
  autocomplete: ""
  # minimun characters to type before autocompleter starts
  autocomplete_min: 4
  # Default search language - leave blank to detect from browser information or
  # use codes from 'languages.py'
  default_lang: ""
  # Available languages
  # languages:
  #   - all
  #   - en
  #   - en-US
  #   - de
  #   - it-IT
  #   - fr
  #   - fr-BE
  # ban time in seconds after engine errors
  ban_time_on_fail: 5
  # max ban time in seconds after engine errors
  max_ban_time_on_fail: 120
  # remove format to deny access, use lower case.
  # formats: [html, csv, json, rss]
  formats:
    - html

server:
  # If you change port, bind_address or base_url don't forget to rebuild
  # instance's environment (make buildenv)
  port: 8888
  bind_address: "127.0.0.1"
  base_url: false  # Possible values: false or "https://example.org/location".
  limiter: false  # rate limit the number of request on the instance, block some bots

  # If your instance owns a /etc/searxng/settings.yml file, then set the following
  # values there.

  secret_key: "ultrasecretkey"  # change this!
  # Proxying image results through searx
  image_proxy: false
  # 1.0 and 1.1 are supported
  http_protocol_version: "1.0"
  # POST queries are more secure as they don't show up in history but may cause
  # problems when using Firefox containers
  method: "POST"
  default_http_headers:
    X-Content-Type-Options: nosniff
    X-XSS-Protection: 1; mode=block
    X-Download-Options: noopen
    X-Robots-Tag: noindex, nofollow
    Referrer-Policy: no-referrer

redis:
  # https://redis-py.readthedocs.io/en/stable/connections.html#redis.client.Redis.from_url
  url: false

ui:
  # Custom static path - leave it blank if you didn't change
  static_path: ""
  static_use_hash: false
  # Custom templates path - leave it blank if you didn't change
  templates_path: ""
  # query_in_title: When true, the result page's titles contains the query
  # it decreases the privacy, since the browser can records the page titles.
  query_in_title: false
  # infinite_scroll: When true, automatically loads the next page when scrolling to bottom of the current page.
  infinite_scroll: false
  # ui theme
  default_theme: simple
  # center the results ?
  center_alignment: false
  # URL prefix of the internet archive, don't forgett trailing slash (if needed).
  # cache_url: "https://webcache.googleusercontent.com/search?q=cache:"
  # Default interface locale - leave blank to detect from browser information or
  # use codes from the 'locales' config section
  default_locale: ""
  # Open result links in a new tab by default
  # results_on_new_tab: false
  theme_args:
    # style of simple theme: auto, light, dark
    simple_style: auto

# Lock arbitrary settings on the preferences page.  To find the ID of the user
# setting you want to lock, check the ID of the form on the page "preferences".
#
# preferences:
#   lock:
#     - language
#     - autocomplete
#     - method
#     - query_in_title

# searx supports result proxification using an external service:
# https://github.com/asciimoo/morty uncomment below section if you have running
# morty proxy the key is base64 encoded (keep the !!binary notation)
# Note: since commit af77ec3, morty accepts a base64 encoded key.
#
# result_proxy:
#   url: http://127.0.0.1:3000/
#   # the key is a base64 encoded string, the YAML !!binary prefix is optional
#   key: !!binary "your_morty_proxy_key"
#   # [true|false] enable the "proxy" button next to each result
#   proxify_results: true

# communication with search engines
#
outgoing:
  # default timeout in seconds, can be override by engine
  request_timeout: 3.0
  # the maximum timeout in seconds
  # max_request_timeout: 10.0
  # suffix of searx_useragent, could contain information like an email address
  # to the administrator
  useragent_suffix: ""
  # The maximum number of concurrent connections that may be established.
  pool_connections: 100
  # Allow the connection pool to maintain keep-alive connections below this
  # point.
  pool_maxsize: 20
  # See https://www.python-httpx.org/http2/
  enable_http2: true
  # uncomment below section if you want to use a custom server certificate
  # see https://www.python-httpx.org/advanced/#changing-the-verification-defaults
  # and https://www.python-httpx.org/compatibility/#ssl-configuration
  #  verify: ~/.mitmproxy/mitmproxy-ca-cert.cer
  #
  # uncomment below section if you want to use a proxyq see: SOCKS proxies
  #   https://2.python-requests.org/en/latest/user/advanced/#proxies
  # are also supported: see
  #   https://2.python-requests.org/en/latest/user/advanced/#socks
  #
  #  proxies:
  #    all://:
  #      - http://proxy1:8080
  #      - http://proxy2:8080
  #
  #  using_tor_proxy: true
  #
  # Extra seconds to add in order to account for the time taken by the proxy
  #
  #  extra_proxy_timeout: 10.0
  #
  # uncomment below section only if you have more than one network interface
  # which can be the source of outgoing search requests
  #
  #  source_ips:
  #    - 1.1.1.1
  #    - 1.1.1.2
  #    - fe80::/126

# External plugin configuration, for more details see
#   https://docs.searxng.org/dev/plugins.html
#
# plugins:
#   - plugin1
#   - plugin2
#   - ...

# Comment or un-comment plugin to activate / deactivate by default.
#
# enabled_plugins:
#   # these plugins are enabled if nothing is configured ..
#   - 'Hash plugin'
#   - 'Search on category select'
#   - 'Self Information'
#   - 'Tracker URL remover'
#   - 'Ahmia blacklist'  # activation depends on outgoing.using_tor_proxy
#   # these plugins are disabled if nothing is configured ..
#   - 'Hostname replace'  # see hostname_replace configuration below
#   - 'Open Access DOI rewrite'
#   - 'Vim-like hotkeys'
#   - 'Tor check plugin'

# Configuration of the "Hostname replace" plugin:
#
# hostname_replace:
#   '(.*\.)?youtube\.com$': 'invidious.example.com'
#   '(.*\.)?youtu\.be$': 'invidious.example.com'
#   '(.*\.)?youtube-noocookie\.com$': 'yotter.example.com'
#   '(.*\.)?reddit\.com$': 'teddit.example.com'
#   '(.*\.)?redd\.it$': 'teddit.example.com'
#   '(www\.)?twitter\.com$': 'nitter.example.com'
#   # to remove matching host names from result list, set value to false
#   'spam\.example\.com': false

checker:
  # disable checker when in debug mode
  off_when_debug: true

  # use "scheduling: false" to disable scheduling
  # scheduling: interval or int

  # to activate the scheduler:
  # * uncomment "scheduling" section
  # * add "cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1"
  #   to your uwsgi.ini

  # scheduling:
  #   start_after: [300, 1800]  # delay to start the first run of the checker
  #   every: [86400, 90000]     # how often the checker runs

  # additional tests: only for the YAML anchors (see the engines section)
  #
  additional_tests:
    rosebud: &test_rosebud
      matrix:
        query: rosebud
        lang: en
      result_container:
        - not_empty
        - ['one_title_contains', 'citizen kane']
      test:
        - unique_results

    android: &test_android
      matrix:
        query: ['android']
        lang: ['en', 'de', 'fr', 'zh-CN']
      result_container:
        - not_empty
        - ['one_title_contains', 'google']
      test:
        - unique_results

  # tests: only for the YAML anchors (see the engines section)
  tests:
    infobox: &tests_infobox
      infobox:
        matrix:
          query: ["linux", "new york", "bbc"]
        result_container:
          - has_infobox

categories_as_tabs:
  general:
  images:
  videos:
  news:
  map:
  music:
  it:
  science:
  files:
  social media:

engines:
  - name: 9gag
    engine: 9gag
    shortcut: 9g
    disabled: true

  - name: apk mirror
    engine: apkmirror
    timeout: 4.0
    shortcut: apkm
    disabled: true

  - name: apple app store
    engine: apple_app_store
    shortcut: aps
    disabled: true

  # Requires Tor
  - name: ahmia
    engine: ahmia
    categories: onions
    enable_http: true
    shortcut: ah

  - name: arch linux wiki
    engine: archlinux
    shortcut: al

  - name: archive is
    engine: xpath
    search_url: https://archive.is/search/?q={query}
    url_xpath: (//div[@class="TEXT-BLOCK"]/a)/@href
    title_xpath: (//div[@class="TEXT-BLOCK"]/a)
    content_xpath: //div[@class="TEXT-BLOCK"]/ul/li
    categories: general
    timeout: 7.0
    disabled: true
    shortcut: ai
    soft_max_redirects: 1
    about:
      website: https://archive.is/
      wikidata_id: Q13515725
      official_api_documentation: https://mementoweb.org/depot/native/archiveis/
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: artic
    engine: artic
    shortcut: arc
    timeout: 4.0

  - name: arxiv
    engine: arxiv
    shortcut: arx
    timeout: 4.0

  # tmp suspended:  dh key too small
  # - name: base
  #   engine: base
  #   shortcut: bs

  - name: bandcamp
    engine: bandcamp
    shortcut: bc
    categories: music

  - name: wikipedia
    engine: wikipedia
    shortcut: wp
    base_url: 'https://{language}.wikipedia.org/'

  - name: bing
    engine: bing
    shortcut: bi
    disabled: true

  - name: bing images
    engine: bing_images
    shortcut: bii

  - name: bing news
    engine: bing_news
    shortcut: bin

  - name: bing videos
    engine: bing_videos
    shortcut: biv

  - name: bitbucket
    engine: xpath
    paging: true
    search_url: https://bitbucket.org/repo/all/{pageno}?name={query}
    url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href
    title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]
    content_xpath: //article[@class="repo-summary"]/p
    categories: [it, repos]
    timeout: 4.0
    disabled: true
    shortcut: bb
    about:
      website: https://bitbucket.org/
      wikidata_id: Q2493781
      official_api_documentation: https://developer.atlassian.com/bitbucket
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: btdigg
    engine: btdigg
    shortcut: bt

  - name: ccc-tv
    engine: xpath
    paging: false
    search_url: https://media.ccc.de/search/?q={query}
    url_xpath: //div[@class="caption"]/h3/a/@href
    title_xpath: //div[@class="caption"]/h3/a/text()
    content_xpath: //div[@class="caption"]/h4/@title
    categories: videos
    disabled: true
    shortcut: c3tv
    about:
      website: https://media.ccc.de/
      wikidata_id: Q80729951
      official_api_documentation: https://github.com/voc/voctoweb
      use_official_api: false
      require_api_key: false
      results: HTML
      # We don't set language: de here because media.ccc.de is not just
      # for a German audience. It contains many English videos and many
      # German videos have English subtitles.

  - name: openverse
    engine: openverse
    categories: images
    shortcut: opv

  # - name: core.ac.uk
  #   engine: core
  #   categories: science
  #   shortcut: cor
  #   # get your API key from: https://core.ac.uk/api-keys/register/
  #   api_key: 'unset'

  - name: crossref
    engine: crossref
    shortcut: cr
    timeout: 30
    disabled: true

  - name: yep
    engine: json_engine
    shortcut: yep
    categories: general
    disabled: true
    paging: false
    content_html_to_text: true
    title_html_to_text: true
    search_url: https://api.yep.com/fs/1/?type=web&q={query}&no_correct=false&limit=100
    results_query: 1/results
    title_query: title
    url_query: url
    content_query: snippet
    about:
      website: https://yep.com
      use_official_api: false
      require_api_key: false
      results: JSON

  - name: curlie
    engine: xpath
    shortcut: cl
    categories: general
    disabled: true
    paging: true
    lang_all: ''
    search_url: https://curlie.org/search?q={query}&lang={lang}&start={pageno}&stime=92452189
    page_size: 20
    results_xpath: //div[@id="site-list-content"]/div[@class="site-item"]
    url_xpath: ./div[@class="title-and-desc"]/a/@href
    title_xpath: ./div[@class="title-and-desc"]/a/div
    content_xpath: ./div[@class="title-and-desc"]/div[@class="site-descr"]
    about:
      website: https://curlie.org/
      wikidata_id: Q60715723
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: currency
    engine: currency_convert
    categories: general
    shortcut: cc

  - name: deezer
    engine: deezer
    shortcut: dz
    disabled: true

  - name: deviantart
    engine: deviantart
    shortcut: da
    timeout: 3.0

  - name: ddg definitions
    engine: duckduckgo_definitions
    shortcut: ddd
    weight: 2
    disabled: true
    tests: *tests_infobox

  # cloudflare protected
  # - name: digbt
  #   engine: digbt
  #   shortcut: dbt
  #   timeout: 6.0
  #   disabled: true

  - name: docker hub
    engine: docker_hub
    shortcut: dh
    categories: [it, packages]

  - name: erowid
    engine: xpath
    paging: true
    first_page_num: 0
    page_size: 30
    search_url: https://www.erowid.org/search.php?q={query}&s={pageno}
    url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href
    title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text()
    content_xpath: //dl[@class="results-list"]/dd[@class="result-details"]
    categories: []
    shortcut: ew
    disabled: true
    about:
      website: https://www.erowid.org/
      wikidata_id: Q1430691
      official_api_documentation:
      use_official_api: false
      require_api_key: false
      results: HTML

  # - name: elasticsearch
  #   shortcut: es
  #   engine: elasticsearch
  #   base_url: http://localhost:9200
  #   username: elastic
  #   password: changeme
  #   index: my-index
  #   # available options: match, simple_query_string, term, terms, custom
  #   query_type: match
  #   # if query_type is set to custom, provide your query here
  #   #custom_query_json: {"query":{"match_all": {}}}
  #   #show_metadata: false
  #   disabled: true

  - name: wikidata
    engine: wikidata
    shortcut: wd
    timeout: 3.0
    weight: 2
    tests: *tests_infobox

  - name: duckduckgo
    engine: duckduckgo
    shortcut: ddg

  - name: duckduckgo images
    engine: duckduckgo_images
    shortcut: ddi
    timeout: 3.0
    disabled: true

  - name: duckduckgo weather
    engine: duckduckgo_weather
    shortcut: ddw
    disabled: true

  - name: apple maps
    engine: apple_maps
    shortcut: apm
    disabled: true
    timeout: 5.0

  - name: emojipedia
    engine: emojipedia
    timeout: 4.0
    shortcut: em
    disabled: true

  - name: tineye
    engine: tineye
    shortcut: tin
    timeout: 9.0

  - name: etymonline
    engine: xpath
    paging: true
    search_url: https://etymonline.com/search?page={pageno}&q={query}
    url_xpath: //a[contains(@class, "word__name--")]/@href
    title_xpath: //a[contains(@class, "word__name--")]
    content_xpath: //section[contains(@class, "word__defination")]
    first_page_num: 1
    shortcut: et
    categories: [dictionaries]
    disabled: false
    about:
      website: https://www.etymonline.com/
      wikidata_id: Q1188617
      official_api_documentation:
      use_official_api: false
      require_api_key: false
      results: HTML

  # - name: ebay
  #   engine: ebay
  #   shortcut: eb
  #   base_url: 'https://www.ebay.com'
  #   disabled: true
  #   timeout: 5

  - name: 1x
    engine: www1x
    shortcut: 1x
    timeout: 3.0
    disabled: true

  - name: fdroid
    engine: fdroid
    shortcut: fd
    disabled: true

  - name: flickr
    categories: images
    shortcut: fl
    # You can use the engine using the official stable API, but you need an API
    # key, see: https://www.flickr.com/services/apps/create/
    # engine: flickr
    # api_key: 'apikey' # required!
    # Or you can use the html non-stable engine, activated by default
    engine: flickr_noapi

  - name: free software directory
    engine: mediawiki
    shortcut: fsd
    categories: [it, software wikis]
    base_url: https://directory.fsf.org/
    number_of_results: 5
    # what part of a page matches the query string: title, text, nearmatch
    # * title     - query matches title
    # * text      - query matches the text of page
    # * nearmatch - nearmatch in title
    search_type: title
    timeout: 5.0
    disabled: true
    about:
      website: https://directory.fsf.org/
      wikidata_id: Q2470288

  # - name: freesound
  #   engine: freesound
  #   shortcut: fnd
  #   disabled: true
  #   timeout: 15.0
  # API key required, see: https://freesound.org/docs/api/overview.html
  #   api_key: MyAPIkey

  - name: frinkiac
    engine: frinkiac
    shortcut: frk
    disabled: true

  - name: genius
    engine: genius
    shortcut: gen

  - name: gigablast
    engine: gigablast
    shortcut: gb
    timeout: 4.0
    disabled: true
    additional_tests:
      rosebud: *test_rosebud

  - name: gentoo
    engine: gentoo
    shortcut: ge

  - name: gitlab
    engine: json_engine
    paging: true
    search_url: https://gitlab.com/api/v4/projects?search={query}&page={pageno}
    url_query: web_url
    title_query: name_with_namespace
    content_query: description
    page_size: 20
    categories: [it, repos]
    shortcut: gl
    timeout: 10.0
    disabled: true
    about:
      website: https://about.gitlab.com/
      wikidata_id: Q16639197
      official_api_documentation: https://docs.gitlab.com/ee/api/
      use_official_api: false
      require_api_key: false
      results: JSON

  - name: github
    engine: github
    shortcut: gh

    # This a Gitea service. If you would like to use a different instance,
    # change codeberg.org to URL of the desired Gitea host. Or you can create a
    # new engine by copying this and changing the name, shortcut and search_url.

  - name: codeberg
    engine: json_engine
    search_url: https://codeberg.org/api/v1/repos/search?q={query}&limit=10
    url_query: html_url
    title_query: name
    content_query: description
    categories: [it, repos]
    shortcut: cb
    disabled: true
    about:
      website: https://codeberg.org/
      wikidata_id:
      official_api_documentation: https://try.gitea.io/api/swagger
      use_official_api: false
      require_api_key: false
      results: JSON

  - name: google
    engine: google
    shortcut: go
    # see https://docs.searxng.org/src/searx.engines.google.html#module-searx.engines.google
    use_mobile_ui: false
    # additional_tests:
    #   android: *test_android

  # - name: google italian
  #   engine: google
  #   shortcut: goit
  #   use_mobile_ui: false
  #   language: it

  # - name: google mobile ui
  #   engine: google
  #   shortcut: gomui
  #   use_mobile_ui: true

  - name: google images
    engine: google_images
    shortcut: goi
    # additional_tests:
    #   android: *test_android
    #   dali:
    #     matrix:
    #       query: ['Dali Christ']
    #       lang: ['en', 'de', 'fr', 'zh-CN']
    #     result_container:
    #       - ['one_title_contains', 'Salvador']

  - name: google news
    engine: google_news
    shortcut: gon
    # additional_tests:
    #   android: *test_android

  - name: google videos
    engine: google_videos
    shortcut: gov
    # additional_tests:
    #   android: *test_android

  - name: google scholar
    engine: google_scholar
    shortcut: gos

  - name: google play apps
    engine: google_play_apps
    shortcut: gpa
    disabled: true

  - name: google play movies
    engine: xpath
    send_accept_language_header: true
    search_url: https://play.google.com/store/search?q={query}&c=movies
    results_xpath: '//div[@class="ImZGtf mpg5gc"]'
    title_xpath: './/div[@class="RZEgze"]//div[@class="kCSSQe"]//a'
    url_xpath: './/div[@class="RZEgze"]//div[@class="kCSSQe"]//a/@href'
    content_xpath: './/div[@class="kCSSQe"]'
    thumbnail_xpath: './/div[@class="uzcko"]/div/span[1]//img/@data-src'
    categories: videos
    shortcut: gpm
    disabled: true
    about:
      website: https://play.google.com/
      wikidata_id: Q79576
      official_api_documentation:
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: gpodder
    engine: json_engine
    shortcut: gpod
    timeout: 4.0
    paging: false
    search_url: https://gpodder.net/search.json?q={query}
    url_query: url
    title_query: title
    content_query: description
    page_size: 19
    categories: music
    disabled: true
    about:
      website: https://gpodder.net
      wikidata_id: Q3093354
      official_api_documentation: https://gpoddernet.readthedocs.io/en/latest/api/
      use_official_api: false
      requires_api_key: false
      results: JSON

  - name: habrahabr
    engine: xpath
    paging: true
    search_url: https://habrahabr.ru/search/page{pageno}/?q={query}
    url_xpath: //article[contains(@class, "post")]//a[@class="post__title_link"]/@href
    title_xpath: //article[contains(@class, "post")]//a[@class="post__title_link"]
    content_xpath: //article[contains(@class, "post")]//div[contains(@class, "post__text")]
    categories: it
    timeout: 4.0
    disabled: true
    shortcut: habr
    about:
      website: https://habr.com/
      wikidata_id: Q4494434
      official_api_documentation: https://habr.com/en/docs/help/api/
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: hoogle
    engine: xpath
    paging: true
    search_url: https://hoogle.haskell.org/?hoogle={query}&start={pageno}
    results_xpath: '//div[@class="result"]'
    title_xpath: './/div[@class="ans"]//a'
    url_xpath: './/div[@class="ans"]//a/@href'
    content_xpath: './/div[@class="from"]'
    page_size: 20
    categories: [it, packages]
    shortcut: ho
    about:
      website: https://hoogle.haskell.org/
      wikidata_id: Q34010
      official_api_documentation: https://hackage.haskell.org/api
      use_official_api: false
      require_api_key: false
      results: JSON

  - name: imdb
    engine: imdb
    shortcut: imdb
    timeout: 6.0
    disabled: true

  - name: ina
    engine: ina
    shortcut: in
    timeout: 6.0
    disabled: true

  - name: invidious
    engine: invidious
    # Instanes will be selected randomly, see https://api.invidious.io/ for
    # instances that are stable (good uptime) and close to you.
    base_url:
      - https://invidious.snopyta.org
      - https://vid.puffyan.us
      # - https://invidious.kavin.rocks  # Error 1020 // Access denied by Cloudflare
      - https://invidio.xamh.de
      - https://inv.riverside.rocks
    shortcut: iv
    timeout: 3.0
    disabled: true

  - name: jisho
    engine: jisho
    shortcut: js
    timeout: 3.0
    disabled: true

  - name: kickass
    engine: kickass
    shortcut: kc
    timeout: 4.0
    disabled: true

  - name: library genesis
    engine: xpath
    search_url: https://libgen.fun/search.php?req={query}
    url_xpath: //a[contains(@href,"get.php?md5")]/@href
    title_xpath: //a[contains(@href,"book/")]/text()[1]
    content_xpath: //td/a[1][contains(@href,"=author")]/text()
    categories: files
    timeout: 7.0
    disabled: true
    shortcut: lg
    about:
      website: https://libgen.fun/
      wikidata_id: Q22017206
      official_api_documentation:
      use_official_api: false
      require_api_key: false
      results: HTML

  # Disabling zlibrary due to z-lib.org domain seizure
  # https://github.com/searxng/searxng/pull/1937
  #
  # - name: z-library
  #   engine: zlibrary
  #   shortcut: zlib
  #   categories: files
  #   timeout: 3.0
  #   # choose base_url, otherwise engine will do it at initialization time
  #   # base_url: https://b-ok.cc
  #   # base_url: https://de1lib.org
  #   # base_url: https://booksc.eu   # does not have cover preview
  #   # base_url: https://booksc.org  # does not have cover preview

  - name: library of congress
    engine: loc
    shortcut: loc
    categories: images

  - name: lingva
    engine: lingva
    shortcut: lv
    # set lingva instance in url, by default it will use the official instance
    # url: https://lingva.ml

  - name: lobste.rs
    engine: xpath
    search_url: https://lobste.rs/search?utf8=%E2%9C%93&q={query}&what=stories&order=relevance
    results_xpath: //li[contains(@class, "story")]
    url_xpath: .//a[@class="u-url"]/@href
    title_xpath: .//a[@class="u-url"]
    content_xpath: .//a[@class="domain"]
    categories: it
    shortcut: lo
    timeout: 5.0
    disabled: true
    about:
      website: https://lobste.rs/
      wikidata_id: Q60762874
      official_api_documentation:
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: azlyrics
    shortcut: lyrics
    engine: xpath
    timeout: 4.0
    disabled: true
    categories: [music, lyrics]
    paging: true
    search_url: https://search.azlyrics.com/search.php?q={query}&w=lyrics&p={pageno}
    url_xpath: //td[@class="text-left visitedlyr"]/a/@href
    title_xpath: //span/b/text()
    content_xpath: //td[@class="text-left visitedlyr"]/a/small
    about:
      website: https://azlyrics.com
      wikidata_id: Q66372542
      official_api_documentation:
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: metacpan
    engine: metacpan
    shortcut: cpan
    disabled: true
    number_of_results: 20

  # - name: meilisearch
  #   engine: meilisearch
  #   shortcut: mes
  #   enable_http: true
  #   base_url: http://localhost:7700
  #   index: my-index

  - name: mixcloud
    engine: mixcloud
    shortcut: mc

  # MongoDB engine
  # Required dependency: pymongo
  # - name: mymongo
  #   engine: mongodb
  #   shortcut: md
  #   exact_match_only: false
  #   host: '127.0.0.1'
  #   port: 27017
  #   enable_http: true
  #   results_per_page: 20
  #   database: 'business'
  #   collection: 'reviews'  # name of the db collection
  #   key: 'name'  # key in the collection to search for

  - name: neeva
    engine: xpath
    shortcut: nv
    time_range_support: true
    time_range_url: '&alf%5Bfreshness%5D={time_range_val}'
    time_range_map:
      day: 'Day'
      week: 'Week'
      month: 'Month'
      year: 'Year'
    search_url: https://neeva.com/search?q={query}&c=All&src=Pagination&page={pageno}{time_range}
    results_xpath: //div[@class="web-index__component-2rKiM"] | //li[@class="web-rich-deep-links__deepLink-SIbD4"]
    url_xpath: .//a[@class="lib-doc-title__link-1b9rC"]/@href | ./h2/a/@href
    title_xpath: .//a[@class="lib-doc-title__link-1b9rC"] | ./h2/a
    content_xpath: >
      .//div[@class="lib-doc-snippet__component-3ewW6"]/text() |
      .//div[@class="lib-doc-snippet__component-3ewW6"]/*[not(self::a)] |
      ./p
    content_html_to_text: true
    suggestion_xpath: //span[@class="result-related-searches__link-2ho_u"]
    paging: true
    disabled: true
    categories: [general, web]
    timeout: 5.0
    soft_max_redirects: 2
    about:
      website: https://neeva.com
      official_api_documentation:
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: npm
    engine: json_engine
    paging: true
    first_page_num: 0
    search_url: https://api.npms.io/v2/search?q={query}&size=25&from={pageno}
    results_query: results
    url_query: package/links/npm
    title_query: package/name
    content_query: package/description
    page_size: 25
    categories: [it, packages]
    disabled: true
    timeout: 5.0
    shortcut: npm
    about:
      website: https://npms.io/
      wikidata_id: Q7067518
      official_api_documentation: https://api-docs.npms.io/
      use_official_api: false
      require_api_key: false
      results: JSON

  - name: nyaa
    engine: nyaa
    shortcut: nt
    disabled: true

  - name: mankier
    engine: json_engine
    search_url: https://www.mankier.com/api/v2/mans/?q={query}
    results_query: results
    url_query: url
    title_query: name
    content_query: description
    categories: it
    shortcut: man
    about:
      website: https://www.mankier.com/
      official_api_documentation: https://www.mankier.com/api
      use_official_api: true
      require_api_key: false
      results: JSON

  - name: openairedatasets
    engine: json_engine
    paging: true
    search_url: https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query}
    results_query: response/results/result
    url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$
    title_query: metadata/oaf:entity/oaf:result/title/$
    content_query: metadata/oaf:entity/oaf:result/description/$
    content_html_to_text: true
    categories: "science"
    shortcut: oad
    timeout: 5.0
    about:
      website: https://www.openaire.eu/
      wikidata_id: Q25106053
      official_api_documentation: https://api.openaire.eu/
      use_official_api: false
      require_api_key: false
      results: JSON

  - name: openairepublications
    engine: json_engine
    paging: true
    search_url: https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query}
    results_query: response/results/result
    url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$
    title_query: metadata/oaf:entity/oaf:result/title/$
    content_query: metadata/oaf:entity/oaf:result/description/$
    content_html_to_text: true
    categories: science
    shortcut: oap
    timeout: 5.0
    about:
      website: https://www.openaire.eu/
      wikidata_id: Q25106053
      official_api_documentation: https://api.openaire.eu/
      use_official_api: false
      require_api_key: false
      results: JSON

  # - name: opensemanticsearch
  #   engine: opensemantic
  #   shortcut: oss
  #   base_url: 'http://localhost:8983/solr/opensemanticsearch/'

  - name: openstreetmap
    engine: openstreetmap
    shortcut: osm

  - name: openrepos
    engine: xpath
    paging: true
    search_url: https://openrepos.net/search/node/{query}?page={pageno}
    url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href
    title_xpath: //li[@class="search-result"]//h3[@class="title"]/a
    content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"]
    categories: files
    timeout: 4.0
    disabled: true
    shortcut: or
    about:
      website: https://openrepos.net/
      wikidata_id:
      official_api_documentation:
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: packagist
    engine: json_engine
    paging: true
    search_url: https://packagist.org/search.json?q={query}&page={pageno}
    results_query: results
    url_query: url
    title_query: name
    content_query: description
    categories: [it, packages]
    disabled: true
    timeout: 5.0
    shortcut: pack
    about:
      website: https://packagist.org
      wikidata_id: Q108311377
      official_api_documentation: https://packagist.org/apidoc
      use_official_api: true
      require_api_key: false
      results: JSON

  - name: pdbe
    engine: pdbe
    shortcut: pdb
    # Hide obsolete PDB entries.  Default is not to hide obsolete structures
    #  hide_obsolete: false

  - name: photon
    engine: photon
    shortcut: ph

  - name: piratebay
    engine: piratebay
    shortcut: tpb
    # You may need to change this URL to a proxy if piratebay is blocked in your
    # country
    url: https://thepiratebay.org/
    timeout: 3.0

  # Required dependency: psychopg2
  #  - name: postgresql
  #    engine: postgresql
  #    database: postgres
  #    username: postgres
  #    password: postgres
  #    limit: 10
  #    query_str: 'SELECT * from my_table WHERE my_column = %(query)s'
  #    shortcut : psql

  - name: pub.dev
    engine: xpath
    shortcut: pd
    search_url: https://pub.dev/packages?q={query}&page={pageno}
    paging: true
    results_xpath: /html/body/main/div/div[@class="search-results"]/div[@class="packages"]/div
    url_xpath: ./div/h3/a/@href
    title_xpath: ./div/h3/a
    content_xpath: ./p[@class="packages-description"]
    categories: [packages, it]
    timeout: 3.0
    disabled: true
    first_page_num: 1
    about:
      website: https://pub.dev/
      official_api_documentation: https://pub.dev/help/api
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: pubmed
    engine: pubmed
    shortcut: pub
    timeout: 3.0

  - name: pypi
    shortcut: pypi
    engine: xpath
    paging: true
    search_url: https://pypi.org/search?q={query}&page={pageno}
    results_xpath: /html/body/main/div/div/div/form/div/ul/li/a[@class="package-snippet"]
    url_xpath: ./@href
    title_xpath: ./h3/span[@class="package-snippet__name"]
    content_xpath: ./p
    suggestion_xpath: /html/body/main/div/div/div/form/div/div[@class="callout-block"]/p/span/a[@class="link"]
    first_page_num: 1
    categories: [it, packages]
    about:
      website: https://pypi.org
      wikidata_id: Q2984686
      official_api_documentation: https://warehouse.readthedocs.io/api-reference/index.html
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: qwant
    qwant_categ: web
    engine: qwant
    shortcut: qw
    categories: [general, web]
    disabled: false
    additional_tests:
      rosebud: *test_rosebud

  - name: qwant news
    qwant_categ: news
    engine: qwant
    shortcut: qwn
    categories: news
    disabled: false
    network: qwant

  - name: qwant images
    qwant_categ: images
    engine: qwant
    shortcut: qwi
    categories: [images, web]
    disabled: false
    network: qwant

  - name: qwant videos
    qwant_categ: videos
    engine: qwant
    shortcut: qwv
    categories: [videos, web]
    disabled: false
    network: qwant

  # - name: library
  #   engine: recoll
  #   shortcut: lib
  #   base_url: 'https://recoll.example.org/'
  #   search_dir: ''
  #   mount_prefix: /export
  #   dl_prefix: 'https://download.example.org'
  #   timeout: 30.0
  #   categories: files
  #   disabled: true

  # - name: recoll library reference
  #   engine: recoll
  #   base_url: 'https://recoll.example.org/'
  #   search_dir: reference
  #   mount_prefix: /export
  #   dl_prefix: 'https://download.example.org'
  #   shortcut: libr
  #   timeout: 30.0
  #   categories: files
  #   disabled: true

  - name: reddit
    engine: reddit
    shortcut: re
    page_size: 25

  # Required dependency: redis
  # - name: myredis
  #   shortcut : rds
  #   engine: redis_server
  #   exact_match_only: false
  #   host: '127.0.0.1'
  #   port: 6379
  #   enable_http: true
  #   password: ''
  #   db: 0

  # tmp suspended: bad certificate
  #  - name: scanr structures
  #    shortcut: scs
  #    engine: scanr_structures
  #    disabled: true

  - name: sepiasearch
    engine: sepiasearch
    shortcut: sep

  - name: soundcloud
    engine: soundcloud
    shortcut: sc

  - name: stackoverflow
    engine: stackexchange
    shortcut: st
    api_site: 'stackoverflow'
    categories: [it, q&a]

  - name: askubuntu
    engine: stackexchange
    shortcut: ubuntu
    api_site: 'askubuntu'
    categories: [it, q&a]

  - name: superuser
    engine: stackexchange
    shortcut: su
    api_site: 'superuser'
    categories: [it, q&a]

  - name: searchcode code
    engine: searchcode_code
    shortcut: scc
    disabled: true

  - name: framalibre
    engine: framalibre
    shortcut: frl
    disabled: true

  # - name: searx
  #   engine: searx_engine
  #   shortcut: se
  #   instance_urls :
  #       - http://127.0.0.1:8888/
  #       - ...
  #   disabled: true

  - name: semantic scholar
    engine: semantic_scholar
    disabled: true
    shortcut: se

  # Spotify needs API credentials
  # - name: spotify
  #   engine: spotify
  #   shortcut: stf
  #   api_client_id: *******
  #   api_client_secret: *******

  # - name: solr
  #   engine: solr
  #   shortcut: slr
  #   base_url: http://localhost:8983
  #   collection: collection_name
  #   sort: '' # sorting: asc or desc
  #   field_list: '' # comma separated list of field names to display on the UI
  #   default_fields: '' # default field to query
  #   query_fields: '' # query fields
  #   enable_http: true

  # - name: springer nature
  #   engine: springer
  #   # get your API key from: https://dev.springernature.com/signup
  #   # working API key, for test & debug: "a69685087d07eca9f13db62f65b8f601"
  #   api_key: 'unset'
  #   shortcut: springer
  #   timeout: 15.0

  - name: startpage
    engine: startpage
    shortcut: sp
    timeout: 6.0
    disabled: true
    additional_tests:
      rosebud: *test_rosebud

  - name: tokyotoshokan
    engine: tokyotoshokan
    shortcut: tt
    timeout: 6.0
    disabled: true

  - name: solidtorrents
    engine: solidtorrents
    shortcut: solid
    timeout: 4.0
    disabled: false
    base_url:
      - https://solidtorrents.net
      - https://solidtorrents.eu
      - https://solidtorrents.to
      - https://bitsearch.to

  # For this demo of the sqlite engine download:
  #   https://liste.mediathekview.de/filmliste-v2.db.bz2
  # and unpack into searx/data/filmliste-v2.db
  # Query to test: "!demo concert"
  #
  # - name: demo
  #   engine: sqlite
  #   shortcut: demo
  #   categories: general
  #   result_template: default.html
  #   database: searx/data/filmliste-v2.db
  #   query_str:  >-
  #     SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title,
  #            COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url,
  #            description AS content
  #       FROM film
  #      WHERE title LIKE :wildcard OR description LIKE :wildcard
  #      ORDER BY duration DESC
  #   disabled: false

  # Requires Tor
  - name: torch
    engine: xpath
    paging: true
    search_url:
      http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and
    results_xpath: //table//tr
    url_xpath: ./td[2]/a
    title_xpath: ./td[2]/b
    content_xpath: ./td[2]/small
    categories: onions
    enable_http: true
    shortcut: tch

  # torznab engine lets you query any torznab compatible indexer.  Using this
  # engine in combination with Jackett (https://github.com/Jackett/Jackett)
  # opens the possibility to query a lot of public and private indexers directly
  # from SearXNG.
  # - name: torznab
  #   engine: torznab
  #   shortcut: trz
  #   base_url: http://localhost:9117/api/v2.0/indexers/all/results/torznab
  #   enable_http: true  # if using localhost
  #   api_key: xxxxxxxxxxxxxxx
  #   # https://github.com/Jackett/Jackett/wiki/Jackett-Categories
  #   torznab_categories:  # optional
  #     - 2000
  #     - 5000

  - name: twitter
    shortcut: tw
    engine: twitter
    disabled: true

  # maybe in a fun category
  #  - name: uncyclopedia
  #    engine: mediawiki
  #    shortcut: unc
  #    base_url: https://uncyclopedia.wikia.com/
  #    number_of_results: 5

  # tmp suspended - too slow, too many errors
  #  - name: urbandictionary
  #    engine      : xpath
  #    search_url  : https://www.urbandictionary.com/define.php?term={query}
  #    url_xpath   : //*[@class="word"]/@href
  #    title_xpath : //*[@class="def-header"]
  #    content_xpath: //*[@class="meaning"]
  #    shortcut: ud

  - name: unsplash
    engine: unsplash
    shortcut: us

  - name: yahoo
    engine: yahoo
    shortcut: yh
    disabled: true

  - name: yahoo news
    engine: yahoo_news
    shortcut: yhn

  - name: youtube
    shortcut: yt
    # You can use the engine using the official stable API, but you need an API
    # key See: https://console.developers.google.com/project
    #
    # engine: youtube_api
    # api_key: 'apikey' # required!
    #
    # Or you can use the html non-stable engine, activated by default
    engine: youtube_noapi

  - name: dailymotion
    engine: dailymotion
    shortcut: dm

  - name: vimeo
    engine: vimeo
    shortcut: vm

  - name: wiby
    engine: json_engine
    search_url: https://wiby.me/json/?q={query}
    url_query: URL
    title_query: Title
    content_query: Snippet
    categories: [general, web]
    shortcut: wib
    disabled: true
    about:
      website: https://wiby.me/

  - name: marginalia
    engine: json_engine
    shortcut: mar
    categories: general
    paging: false
    # index: {"0": "popular", "1": "blogs", "2": "big_sites",
    # "3": "default", "4": experimental"}
    search_url: https://api.marginalia.nu/public/search/{query}?index=4&count=20
    results_query: results
    url_query: url
    title_query: title
    content_query: description
    timeout: 1.5
    disabled: true
    about:
      website: https://www.marginalia.nu/
      official_api_documentation: https://api.marginalia.nu/
      use_official_api: true
      require_api_key: true
      results: JSON

  - name: alexandria
    engine: json_engine
    shortcut: alx
    categories: general
    paging: true
    search_url: https://api.alexandria.org/?a=1&q={query}&p={pageno}
    results_query: results
    title_query: title
    url_query: url
    content_query: snippet
    timeout: 1.5
    disabled: true
    about:
      website: https://alexandria.org/
      official_api_documentation: https://github.com/alexandria-org/alexandria-api/raw/master/README.md
      use_official_api: true
      require_api_key: false
      results: JSON

  - name: wikibooks
    engine: mediawiki
    shortcut: wb
    categories: general
    base_url: "https://{language}.wikibooks.org/"
    number_of_results: 5
    search_type: text
    disabled: true
    about:
      website: https://www.wikibooks.org/
      wikidata_id: Q367

  - name: wikinews
    engine: mediawiki
    shortcut: wn
    categories: news
    base_url: "https://{language}.wikinews.org/"
    number_of_results: 5
    search_type: text
    disabled: true
    about:
      website: https://www.wikinews.org/
      wikidata_id: Q964

  - name: wikiquote
    engine: mediawiki
    shortcut: wq
    categories: general
    base_url: "https://{language}.wikiquote.org/"
    number_of_results: 5
    search_type: text
    disabled: true
    additional_tests:
      rosebud: *test_rosebud
    about:
      website: https://www.wikiquote.org/
      wikidata_id: Q369

  - name: wikisource
    engine: mediawiki
    shortcut: ws
    categories: general
    base_url: "https://{language}.wikisource.org/"
    number_of_results: 5
    search_type: text
    disabled: true
    about:
      website: https://www.wikisource.org/
      wikidata_id: Q263

  - name: wiktionary
    engine: mediawiki
    shortcut: wt
    categories: [dictionaries]
    base_url: "https://{language}.wiktionary.org/"
    number_of_results: 5
    search_type: text
    disabled: false
    about:
      website: https://www.wiktionary.org/
      wikidata_id: Q151

  - name: wikiversity
    engine: mediawiki
    shortcut: wv
    categories: general
    base_url: "https://{language}.wikiversity.org/"
    number_of_results: 5
    search_type: text
    disabled: true
    about:
      website: https://www.wikiversity.org/
      wikidata_id: Q370

  - name: wikivoyage
    engine: mediawiki
    shortcut: wy
    categories: general
    base_url: "https://{language}.wikivoyage.org/"
    number_of_results: 5
    search_type: text
    disabled: true
    about:
      website: https://www.wikivoyage.org/
      wikidata_id: Q373

  - name: wolframalpha
    shortcut: wa
    # You can use the engine using the official stable API, but you need an API
    # key.  See: https://products.wolframalpha.com/api/
    #
    # engine: wolframalpha_api
    # api_key: ''
    #
    # Or you can use the html non-stable engine, activated by default
    engine: wolframalpha_noapi
    timeout: 6.0
    categories: []

  - name: dictzone
    engine: dictzone
    shortcut: dc

  - name: mymemory translated
    engine: translated
    shortcut: tl
    timeout: 5.0
    disabled: false
    # You can use without an API key, but you are limited to 1000 words/day
    # See: https://mymemory.translated.net/doc/usagelimits.php
    # api_key: ''

  # Required dependency: mysql-connector-python
  #  - name: mysql
  #    engine: mysql_server
  #    database: mydatabase
  #    username: user
  #    password: pass
  #    limit: 10
  #    query_str: 'SELECT * from mytable WHERE fieldname=%(query)s'
  #    shortcut: mysql

  - name: 1337x
    engine: 1337x
    shortcut: 1337x
    disabled: true

  - name: duden
    engine: duden
    shortcut: du
    disabled: true

  - name: seznam
    shortcut: szn
    engine: seznam
    disabled: true

  # - name: deepl
  #   engine: deepl
  #   shortcut: dpl
  #   # You can use the engine using the official stable API, but you need an API key
  #   # See: https://www.deepl.com/pro-api?cta=header-pro-api
  #   api_key: ''  # required!
  #   timeout: 5.0
  #   disabled: true

  - name: mojeek
    shortcut: mjk
    engine: xpath
    paging: true
    categories: [general, web]
    search_url: https://www.mojeek.com/search?q={query}&s={pageno}
    results_xpath: //a[@class="ob"]
    url_xpath: ./@href
    title_xpath: ./h2
    content_xpath: ../p[@class="s"]
    suggestion_xpath: /html/body//div[@class="top-info"]/p[@class="top-info spell"]/a
    first_page_num: 0
    page_size: 10
    disabled: true
    about:
      website: https://www.mojeek.com/
      wikidata_id: Q60747299
      official_api_documentation: https://www.mojeek.com/services/api.html/
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: naver
    shortcut: nvr
    categories: [general, web]
    engine: xpath
    paging: true
    search_url: https://search.naver.com/search.naver?where=webkr&sm=osp_hty&ie=UTF-8&query={query}&start={pageno}
    url_xpath: //a[@class="link_tit"]/@href
    title_xpath: //a[@class="link_tit"]
    content_xpath: //a[@class="total_dsc"]/div
    first_page_num: 1
    page_size: 10
    disabled: true
    about:
      website: https://www.naver.com/
      wikidata_id: Q485639
      official_api_documentation: https://developers.naver.com/docs/nmt/examples/
      use_official_api: false
      require_api_key: false
      results: HTML
      language: ko

  - name: rubygems
    shortcut: rbg
    engine: xpath
    paging: true
    search_url: https://rubygems.org/search?page={pageno}&query={query}
    results_xpath: /html/body/main/div/a[@class="gems__gem"]
    url_xpath: ./@href
    title_xpath: ./span/h2
    content_xpath: ./span/p
    suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a
    first_page_num: 1
    categories: [it, packages]
    disabled: true
    about:
      website: https://rubygems.org/
      wikidata_id: Q1853420
      official_api_documentation: https://guides.rubygems.org/rubygems-org-api/
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: peertube
    engine: peertube
    shortcut: ptb
    paging: true
    # https://instances.joinpeertube.org/instances
    base_url: https://peertube.biz/
    # base_url: https://tube.tardis.world/
    categories: videos
    disabled: true
    timeout: 6.0

  - name: mediathekviewweb
    engine: mediathekviewweb
    shortcut: mvw
    disabled: true

  # - name: yacy
  #   engine: yacy
  #   shortcut: ya
  #   base_url: http://localhost:8090
  # required if you aren't using HTTPS for your local yacy instance'
  #   enable_http: true
  #   number_of_results: 5
  #   timeout: 3.0

  - name: rumble
    engine: rumble
    shortcut: ru
    base_url: https://rumble.com/
    paging: true
    categories: videos
    disabled: true

  - name: wordnik
    engine: wordnik
    shortcut: def
    base_url: https://www.wordnik.com/
    categories: [dictionaries]
    timeout: 5.0
    disabled: false

  - name: woxikon.de synonyme
    engine: xpath
    shortcut: woxi
    categories: [dictionaries]
    timeout: 5.0
    disabled: true
    search_url: https://synonyme.woxikon.de/synonyme/{query}.php
    url_xpath: //div[@class="upper-synonyms"]/a/@href
    content_xpath: //div[@class="synonyms-list-group"]
    title_xpath: //div[@class="upper-synonyms"]/a
    no_result_for_http_status: [404]
    about:
      website: https://www.woxikon.de/
      wikidata_id:  # No Wikidata ID
      use_official_api: false
      require_api_key: false
      results: HTML
      language: de

  - name: sjp.pwn
    engine: sjp
    shortcut: sjp
    base_url: https://sjp.pwn.pl/
    timeout: 5.0
    disabled: true

    # wikimini: online encyclopedia for children
    # The fulltext and title parameter is necessary for Wikimini because
    # sometimes it will not show the results and redirect instead
  - name: wikimini
    engine: xpath
    shortcut: wkmn
    search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search
    url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href
    title_xpath: //li//div[@class="mw-search-result-heading"]/a
    content_xpath: //li/div[@class="searchresult"]
    categories: general
    disabled: true
    about:
      website: https://wikimini.org/
      wikidata_id: Q3568032
      use_official_api: false
      require_api_key: false
      results: HTML
      language: fr

  - name: wttr.in
    engine: wttr
    shortcut: wttr
    timeout: 9.0

  - name: brave
    shortcut: brave
    engine: xpath
    paging: true
    time_range_support: true
    first_page_num: 0
    time_range_url: "&tf={time_range_val}"
    search_url: https://search.brave.com/search?q={query}&offset={pageno}&spellcheck=1{time_range}
    url_xpath: //a[@class="result-header"]/@href
    title_xpath: //span[@class="snippet-title"]
    content_xpath: //p[1][@class="snippet-description"]
    suggestion_xpath: //div[@class="text-gray h6"]/a
    time_range_map:
      day: 'pd'
      week: 'pw'
      month: 'pm'
      year: 'py'
    categories: [general, web]
    disabled: true
    headers:
      Accept-Encoding: gzip, deflate
    about:
      website: https://brave.com/search/
      wikidata_id: Q107355971
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: petalsearch
    shortcut: pts
    engine: xpath
    paging: true
    search_url: https://petalsearch.com/search?query={query}&pn={pageno}
    results_xpath: //div[@class="webpage-content"]/div[@class="title-cont"]/a
    url_xpath: ./@href
    title_xpath: .
    content_xpath: ../../div[@class="webpage-text"]
    suggestion_xpath: //div[@class="related-search-items"]/a
    first_page_num: 1
    disabled: true
    about:
      website: https://petalsearch.com/
      wikidata_id: Q104399280
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: petalsearch images
    engine: petal_images
    shortcut: ptsi
    disabled: true
    timeout: 3.0

  - name: petalsearch news
    shortcut: ptsn
    categories: news
    engine: xpath
    paging: true
    search_url: https://petalsearch.com/search?channel=news&query={query}&pn={pageno}
    results_xpath: //div[@class="news-container"]/div/div/div/a
    url_xpath: ./@href
    title_xpath: ./div
    content_xpath: ../div[@class="news-text"]
    thumbnail_xpath: ../../../../img/@src
    first_page_num: 1
    disabled: true
    about:
      website: https://petalsearch.com/
      wikidata_id: Q104399280
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: lib.rs
    shortcut: lrs
    engine: xpath
    search_url: https://lib.rs/search?q={query}
    results_xpath: /html/body/main/div/ol/li/a
    url_xpath: ./@href
    title_xpath: ./div[@class="h"]/h4
    content_xpath: ./div[@class="h"]/p
    categories: [it, packages]
    disabled: true
    about:
      website: https://lib.rs
      wikidata_id: Q113486010
      use_official_api: false
      require_api_key: false
      results: HTML

  - name: sourcehut
    shortcut: srht
    engine: xpath
    paging: true
    search_url: https://sr.ht/projects?page={pageno}&search={query}
    results_xpath: (//div[@class="event-list"])[1]/div[@class="event"]
    url_xpath: ./h4/a[2]/@href
    title_xpath: ./h4/a[2]
    content_xpath: ./p
    first_page_num: 1
    categories: [it, repos]
    disabled: true
    about:
      website: https://sr.ht
      wikidata_id: Q78514485
      official_api_documentation: https://man.sr.ht/
      use_official_api: false
      require_api_key: false
      results: HTML

# Doku engine lets you access to any Doku wiki instance:
# A public one or a privete/corporate one.
#  - name: ubuntuwiki
#    engine: doku
#    shortcut: uw
#    base_url: 'https://doc.ubuntu-fr.org'

# Be careful when enabling this engine if you are
# running a public instance. Do not expose any sensitive
# information. You can restrict access by configuring a list
# of access tokens under tokens.
#  - name: git grep
#    engine: command
#    command: ['git', 'grep', '{{QUERY}}']
#    shortcut: gg
#    tokens: []
#    disabled: true
#    delimiter:
#        chars: ':'
#        keys: ['filepath', 'code']

# Be careful when enabling this engine if you are
# running a public instance. Do not expose any sensitive
# information. You can restrict access by configuring a list
# of access tokens under tokens.
#  - name: locate
#    engine: command
#    command: ['locate', '{{QUERY}}']
#    shortcut: loc
#    tokens: []
#    disabled: true
#    delimiter:
#        chars: ' '
#        keys: ['line']

# Be careful when enabling this engine if you are
# running a public instance. Do not expose any sensitive
# information. You can restrict access by configuring a list
# of access tokens under tokens.
#  - name: find
#    engine: command
#    command: ['find', '.', '-name', '{{QUERY}}']
#    query_type: path
#    shortcut: fnd
#    tokens: []
#    disabled: true
#    delimiter:
#        chars: ' '
#        keys: ['line']

# Be careful when enabling this engine if you are
# running a public instance. Do not expose any sensitive
# information. You can restrict access by configuring a list
# of access tokens under tokens.
#  - name: pattern search in files
#    engine: command
#    command: ['fgrep', '{{QUERY}}']
#    shortcut: fgr
#    tokens: []
#    disabled: true
#    delimiter:
#        chars: ' '
#        keys: ['line']

# Be careful when enabling this engine if you are
# running a public instance. Do not expose any sensitive
# information. You can restrict access by configuring a list
# of access tokens under tokens.
#  - name: regex search in files
#    engine: command
#    command: ['grep', '{{QUERY}}']
#    shortcut: gr
#    tokens: []
#    disabled: true
#    delimiter:
#        chars: ' '
#        keys: ['line']

doi_resolvers:
  oadoi.org: 'https://oadoi.org/'
  doi.org: 'https://doi.org/'
  doai.io: 'https://dissem.in/'
  sci-hub.se: 'https://sci-hub.se/'
  sci-hub.st: 'https://sci-hub.st/'
  sci-hub.ru: 'https://sci-hub.ru/'

default_doi_resolver: 'oadoi.org'

到了这里,关于docker项目-搭建个人搜索引擎SearXNG的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搭建自己的搜索引擎之二

    接上篇 搭建自己的搜索引擎之一 ,本篇主要讲ElasticSearch单实例安装配置。 ElasticSearch版本更新比较频繁,当前已经是8.0版本了,我这里安装的是7.1.1版本,其它版本详细说明可以查阅官方文档。 1、调整vm.max_map_count max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区

    2024年02月07日
    浏览(44)
  • 搭建自己的搜索引擎之五

    接上文 搭建自己的搜索引擎之四,下面继续介绍茴香豆茴字的另外两种写法。 Jest是ES的Java Http Rest客户端,它主要是为了弥补以前ES自有API缺少HttpRest接口客户端的不足,但因为现在ES官方已经提供了RestClient ,该项目已经不怎么维护了。 1、构建JestClient 2、创建索引 3、简单搜

    2024年02月07日
    浏览(47)
  • 搭建自己的搜索引擎之四

    搭建自己的搜索引擎之三 介绍了通过HTTP RESTful 对ES进行增删改查,这一般手工运维ES时使用,程序代码中最好还是使用Java API去操作ES会更容易维护,但ES API竟然贼多,本篇介绍一下 四种 API及其简单使用。 注:有点类似于孔乙己说茴字的四种写法。 TransportClient在7.X版本已经

    2024年02月08日
    浏览(49)
  • 【Boost搜索引擎项目】

    1.编写数据去标签模块–parser.cc 将去标签之后干净文档以title3content3urlntitle3content3urln格式放入同一文件中。 2.建立索引模块–index.hpp 读取处理好的行文本文件进行分词、权重计算等操作,在内存中构造出正排索引和倒排索引。 3.编写搜索引擎模块–searcher.hpp 对查询词进

    2024年02月15日
    浏览(60)
  • Boost搜索引擎项目

    目录 1.项目相关背景 2.搜索引擎的相关宏观原理 3.搜索引擎技术栈和项目环境 4.正排索引 倒排索引--搜索引擎原理 5.编写数据去标签与数据清洗的模块 -- parser.hpp 去标签 编写parser(将文件去标签) 编写EnumFile函数 编写ParseFile函数 解析三大部分: 编写SaveFile函数 6.建立索引--编写

    2024年02月01日
    浏览(82)
  • 【项目】Boost搜索引擎

    研发搜索引擎的公司,如百度、搜狗、360搜索,还有各大网站各种客户端也提供搜索功能 为什么选择实现Boost搜索引擎 1)因为Boost官方网站是没有搜索功能的,所以我们可以为Boost实现一个站内搜索引擎,虽然官方提供了boost相关的一些方法,标准库中的一些接口,但是我们想看到

    2024年02月03日
    浏览(52)
  • 搜索引擎---项目测试

    一)项目背景: 首先介绍一下项目: 项目的目标是实现一个基于JAVAAPI的站内搜索引擎 java官方文档是在学习java语言中不可或缺的权威资料,相比于各种网站的Java资料,官方文档无论是语言表达还是组织方式都要更加全面和准确,因为没有人比作者更加了解自己的作品,官方文档

    2024年02月04日
    浏览(39)
  • 搜索引擎项目

    1、有一个主页、有搜索框。在搜索框中输入的内容 称为“查询词” 2、还有搜索结果页,包含了若干条搜索结果 3、针对每一个搜索结果,都会包含查询词或者查询词的一部分或者和查询词具有一定的相关性 4、每个搜索结果包含好几个部分:         a)标题          b)描述

    2024年02月05日
    浏览(38)
  • 搜索引擎系统———引擎模块(ssm三剑客项目)

    =@TOC 咋们如果用我们的小服务器去搞百度,搜狗那种引擎肯定是不行的,内属于全站搜索,我们这里做一个站内搜索。这个还是可以的,就类似于我们对网站里的资源进行搜索。 搜索引擎就像一个小蜜蜂每天不停的采摘蜂蜜,就是去 爬虫 各个网页,然后通过爬取之后建立

    2023年04月09日
    浏览(44)
  • Java项目——文档搜索引擎

    实现一个较为简单的搜索引擎,在拥有较多网页的基础上,在用户输入查询词之后,能够从这些网页中尽可能地匹配出用户想要的网页 当然,不同于百度搜狗这种搜索引擎,它们能够对互联网中大量的网站都进行搜索,我们这里实现的是针对「Java 文档」的搜索引擎,就像下

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包