We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Search suggestions are lumped together if Yahoo is enabled
**Version of SearXNG, commit number if you are using on master branch and stipulate if you forked SearXNG**
1.0.0-940-32fb2bdf, master branch, not forked

**How did you install SearXNG?**
searxng-docker, fresh install from yesterday.

**What happened?**
Search keyword suggestions are lumped together in one.

**How To Reproduce**
Enable the Yahoo engine.
You can also reproduce this issue with the Yahoo bang (!yh). 

**Expected behavior**
Normally, you would have separate keyword suggestions instead of what's happening right now. 

**Screenshots & Logs**
![image](https://user-images.githubusercontent.com/52939984/138177579-a1a93608-e5d3-4617-9b35-73e858fd6e98.png)

**Additional context**
I have Google, Qwant, Duckduckgo, Startpage, Brave and Yahoo engines enabled by default for all users.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `searx/engines/yahoo.py`
Content:
```
1 # SPDX-License-Identifier: AGPL-3.0-or-later
2 # lint: pylint
3 """Yahoo Search (Web)
4 
5 Languages are supported by mapping the language to a domain.  If domain is not
6 found in :py:obj:`lang2domain` URL ``<lang>.search.yahoo.com`` is used.
7 
8 """
9 
10 from urllib.parse import (
11     unquote,
12     urlencode,
13 )
14 from lxml import html
15 
16 from searx.utils import (
17     eval_xpath_getindex,
18     eval_xpath_list,
19     extract_text,
20     match_language,
21 )
22 
23 # about
24 about = {
25     "website": 'https://search.yahoo.com/',
26     "wikidata_id": None,
27     "official_api_documentation": 'https://developer.yahoo.com/api/',
28     "use_official_api": False,
29     "require_api_key": False,
30     "results": 'HTML',
31 }
32 
33 # engine dependent config
34 categories = ['general']
35 paging = True
36 time_range_support = True
37 supported_languages_url = 'https://search.yahoo.com/preferences/languages'
38 """Supported languages are read from Yahoo preference page."""
39 
40 time_range_dict = {
41     'day': ('1d', 'd'),
42     'week': ('1w', 'w'),
43     'month': ('1m', 'm'),
44 }
45 
46 language_aliases = {
47     'zh-HK': 'zh_chs',
48     'zh-CN': 'zh_chs',  # dead since 2015 / routed to hk.search.yahoo.com
49     'zh-TW': 'zh_cht',
50 }
51 
52 lang2domain = {
53     'zh_chs' : 'hk.search.yahoo.com',
54     'zh_cht' : 'tw.search.yahoo.com',
55     'en'     : 'search.yahoo.com',
56 
57     'bg'     : 'search.yahoo.com',
58     'cs'     : 'search.yahoo.com',
59     'da'     : 'search.yahoo.com',
60     'el'     : 'search.yahoo.com',
61     'et'     : 'search.yahoo.com',
62     'he'     : 'search.yahoo.com',
63     'hr'     : 'search.yahoo.com',
64     'ja'     : 'search.yahoo.com',
65     'ko'     : 'search.yahoo.com',
66     'sk'     : 'search.yahoo.com',
67     'sl'     : 'search.yahoo.com',
68 
69 }
70 """Map language to domain"""
71 
72 def _get_language(params):
73 
74     lang = language_aliases.get(params['language'])
75     if lang is None:
76         lang = match_language(
77             params['language'], supported_languages, language_aliases
78         )
79     lang = lang.split('-')[0]
80     logger.debug("params['language']: %s --> %s" , params['language'], lang)
81     return lang
82 
83 def request(query, params):
84     """build request"""
85     offset = (params['pageno'] - 1) * 7 + 1
86     lang  =  _get_language(params)
87     age, btf = time_range_dict.get(
88         params['time_range'], ('', ''))
89 
90     args = urlencode({
91         'p' : query,
92         'ei' : 'UTF-8',
93         'fl' : 1,
94         'vl' : 'lang_' + lang,
95         'btf' : btf,
96         'fr2' : 'time',
97         'age' : age,
98         'b' : offset,
99         'xargs' :0
100     })
101 
102     domain = lang2domain.get(lang, '%s.search.yahoo.com' % lang)
103     params['url'] = 'https://%s/search?%s' % (domain, args)
104     return params
105 
106 def parse_url(url_string):
107     """remove yahoo-specific tracking-url"""
108 
109     endings = ['/RS', '/RK']
110     endpositions = []
111     start = url_string.find('http', url_string.find('/RU=') + 1)
112 
113     for ending in endings:
114         endpos = url_string.rfind(ending)
115         if endpos > -1:
116             endpositions.append(endpos)
117 
118     if start == 0 or len(endpositions) == 0:
119         return url_string
120 
121     end = min(endpositions)
122     return unquote(url_string[start:end])
123 
124 def response(resp):
125     """parse response"""
126 
127     results = []
128     dom = html.fromstring(resp.text)
129 
130     # parse results
131     for result in eval_xpath_list(dom, '//div[contains(@class,"algo-sr")]'):
132         url = eval_xpath_getindex(result, './/h3/a/@href', 0, default=None)
133         if url is None:
134             continue
135         url = parse_url(url)
136 
137         title = eval_xpath_getindex(result, './/h3/a', 0, default=None)
138         if title is None:
139             continue
140         offset = len(extract_text(title.xpath('span')))
141         title = extract_text(title)[offset:]
142 
143         content = eval_xpath_getindex(
144             result, './/div[contains(@class, "compText")]', 0, default=''
145         )
146         if content:
147             content = extract_text(content)
148 
149         # append result
150         results.append({
151             'url': url,
152             'title': title,
153             'content': content
154         })
155 
156     for suggestion in eval_xpath_list(dom, '//div[contains(@class, "AlsoTry")]'):
157         # append suggestion
158         results.append({'suggestion': extract_text(suggestion)})
159 
160     return results
161 
162 
163 # get supported languages from their site
164 def _fetch_supported_languages(resp):
165     supported_languages = []
166     dom = html.fromstring(resp.text)
167     offset = len('lang_')
168 
169     for val in eval_xpath_list(dom, '//div[contains(@class, "lang-item")]/input/@value'):
170         supported_languages.append( val[offset:] )
171 
172     return supported_languages
173
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/searx/engines/yahoo.py b/searx/engines/yahoo.py
--- a/searx/engines/yahoo.py
+++ b/searx/engines/yahoo.py
@@ -153,7 +153,7 @@
             'content': content
         })
 
-    for suggestion in eval_xpath_list(dom, '//div[contains(@class, "AlsoTry")]'):
+    for suggestion in eval_xpath_list(dom, '//div[contains(@class, "AlsoTry")]//table//a'):
         # append suggestion
         results.append({'suggestion': extract_text(suggestion)})

{"golden_diff": "diff --git a/searx/engines/yahoo.py b/searx/engines/yahoo.py\n--- a/searx/engines/yahoo.py\n+++ b/searx/engines/yahoo.py\n@@ -153,7 +153,7 @@\n             'content': content\n         })\n \n-    for suggestion in eval_xpath_list(dom, '//div[contains(@class, \"AlsoTry\")]'):\n+    for suggestion in eval_xpath_list(dom, '//div[contains(@class, \"AlsoTry\")]//table//a'):\n         # append suggestion\n         results.append({'suggestion': extract_text(suggestion)})\n", "issue": "Search suggestions are lumped together if Yahoo is enabled\n**Version of SearXNG, commit number if you are using on master branch and stipulate if you forked SearXNG**\r\n1.0.0-940-32fb2bdf, master branch, not forked\r\n\r\n**How did you install SearXNG?**\r\nsearxng-docker, fresh install from yesterday.\r\n\r\n**What happened?**\r\nSearch keyword suggestions are lumped together in one.\r\n\r\n**How To Reproduce**\r\nEnable the Yahoo engine.\r\nYou can also reproduce this issue with the Yahoo bang (!yh). \r\n\r\n**Expected behavior**\r\nNormally, you would have separate keyword suggestions instead of what's happening right now. \r\n\r\n**Screenshots & Logs**\r\n![image](https://user-images.githubusercontent.com/52939984/138177579-a1a93608-e5d3-4617-9b35-73e858fd6e98.png)\r\n\r\n**Additional context**\r\nI have Google, Qwant, Duckduckgo, Startpage, Brave and Yahoo engines enabled by default for all users.\r\n\n", "before_files": [{"content": "# SPDX-License-Identifier: AGPL-3.0-or-later\n# lint: pylint\n\"\"\"Yahoo Search (Web)\n\nLanguages are supported by mapping the language to a domain.  If domain is not\nfound in :py:obj:`lang2domain` URL ``<lang>.search.yahoo.com`` is used.\n\n\"\"\"\n\nfrom urllib.parse import (\n    unquote,\n    urlencode,\n)\nfrom lxml import html\n\nfrom searx.utils import (\n    eval_xpath_getindex,\n    eval_xpath_list,\n    extract_text,\n    match_language,\n)\n\n# about\nabout = {\n    \"website\": 'https://search.yahoo.com/',\n    \"wikidata_id\": None,\n    \"official_api_documentation\": 'https://developer.yahoo.com/api/',\n    \"use_official_api\": False,\n    \"require_api_key\": False,\n    \"results\": 'HTML',\n}\n\n# engine dependent config\ncategories = ['general']\npaging = True\ntime_range_support = True\nsupported_languages_url = 'https://search.yahoo.com/preferences/languages'\n\"\"\"Supported languages are read from Yahoo preference page.\"\"\"\n\ntime_range_dict = {\n    'day': ('1d', 'd'),\n    'week': ('1w', 'w'),\n    'month': ('1m', 'm'),\n}\n\nlanguage_aliases = {\n    'zh-HK': 'zh_chs',\n    'zh-CN': 'zh_chs',  # dead since 2015 / routed to hk.search.yahoo.com\n    'zh-TW': 'zh_cht',\n}\n\nlang2domain = {\n    'zh_chs' : 'hk.search.yahoo.com',\n    'zh_cht' : 'tw.search.yahoo.com',\n    'en'     : 'search.yahoo.com',\n\n    'bg'     : 'search.yahoo.com',\n    'cs'     : 'search.yahoo.com',\n    'da'     : 'search.yahoo.com',\n    'el'     : 'search.yahoo.com',\n    'et'     : 'search.yahoo.com',\n    'he'     : 'search.yahoo.com',\n    'hr'     : 'search.yahoo.com',\n    'ja'     : 'search.yahoo.com',\n    'ko'     : 'search.yahoo.com',\n    'sk'     : 'search.yahoo.com',\n    'sl'     : 'search.yahoo.com',\n\n}\n\"\"\"Map language to domain\"\"\"\n\ndef _get_language(params):\n\n    lang = language_aliases.get(params['language'])\n    if lang is None:\n        lang = match_language(\n            params['language'], supported_languages, language_aliases\n        )\n    lang = lang.split('-')[0]\n    logger.debug(\"params['language']: %s --> %s\" , params['language'], lang)\n    return lang\n\ndef request(query, params):\n    \"\"\"build request\"\"\"\n    offset = (params['pageno'] - 1) * 7 + 1\n    lang  =  _get_language(params)\n    age, btf = time_range_dict.get(\n        params['time_range'], ('', ''))\n\n    args = urlencode({\n        'p' : query,\n        'ei' : 'UTF-8',\n        'fl' : 1,\n        'vl' : 'lang_' + lang,\n        'btf' : btf,\n        'fr2' : 'time',\n        'age' : age,\n        'b' : offset,\n        'xargs' :0\n    })\n\n    domain = lang2domain.get(lang, '%s.search.yahoo.com' % lang)\n    params['url'] = 'https://%s/search?%s' % (domain, args)\n    return params\n\ndef parse_url(url_string):\n    \"\"\"remove yahoo-specific tracking-url\"\"\"\n\n    endings = ['/RS', '/RK']\n    endpositions = []\n    start = url_string.find('http', url_string.find('/RU=') + 1)\n\n    for ending in endings:\n        endpos = url_string.rfind(ending)\n        if endpos > -1:\n            endpositions.append(endpos)\n\n    if start == 0 or len(endpositions) == 0:\n        return url_string\n\n    end = min(endpositions)\n    return unquote(url_string[start:end])\n\ndef response(resp):\n    \"\"\"parse response\"\"\"\n\n    results = []\n    dom = html.fromstring(resp.text)\n\n    # parse results\n    for result in eval_xpath_list(dom, '//div[contains(@class,\"algo-sr\")]'):\n        url = eval_xpath_getindex(result, './/h3/a/@href', 0, default=None)\n        if url is None:\n            continue\n        url = parse_url(url)\n\n        title = eval_xpath_getindex(result, './/h3/a', 0, default=None)\n        if title is None:\n            continue\n        offset = len(extract_text(title.xpath('span')))\n        title = extract_text(title)[offset:]\n\n        content = eval_xpath_getindex(\n            result, './/div[contains(@class, \"compText\")]', 0, default=''\n        )\n        if content:\n            content = extract_text(content)\n\n        # append result\n        results.append({\n            'url': url,\n            'title': title,\n            'content': content\n        })\n\n    for suggestion in eval_xpath_list(dom, '//div[contains(@class, \"AlsoTry\")]'):\n        # append suggestion\n        results.append({'suggestion': extract_text(suggestion)})\n\n    return results\n\n\n# get supported languages from their site\ndef _fetch_supported_languages(resp):\n    supported_languages = []\n    dom = html.fromstring(resp.text)\n    offset = len('lang_')\n\n    for val in eval_xpath_list(dom, '//div[contains(@class, \"lang-item\")]/input/@value'):\n        supported_languages.append( val[offset:] )\n\n    return supported_languages\n", "path": "searx/engines/yahoo.py"}], "after_files": [{"content": "# SPDX-License-Identifier: AGPL-3.0-or-later\n# lint: pylint\n\"\"\"Yahoo Search (Web)\n\nLanguages are supported by mapping the language to a domain.  If domain is not\nfound in :py:obj:`lang2domain` URL ``<lang>.search.yahoo.com`` is used.\n\n\"\"\"\n\nfrom urllib.parse import (\n    unquote,\n    urlencode,\n)\nfrom lxml import html\n\nfrom searx.utils import (\n    eval_xpath_getindex,\n    eval_xpath_list,\n    extract_text,\n    match_language,\n)\n\n# about\nabout = {\n    \"website\": 'https://search.yahoo.com/',\n    \"wikidata_id\": None,\n    \"official_api_documentation\": 'https://developer.yahoo.com/api/',\n    \"use_official_api\": False,\n    \"require_api_key\": False,\n    \"results\": 'HTML',\n}\n\n# engine dependent config\ncategories = ['general']\npaging = True\ntime_range_support = True\nsupported_languages_url = 'https://search.yahoo.com/preferences/languages'\n\"\"\"Supported languages are read from Yahoo preference page.\"\"\"\n\ntime_range_dict = {\n    'day': ('1d', 'd'),\n    'week': ('1w', 'w'),\n    'month': ('1m', 'm'),\n}\n\nlanguage_aliases = {\n    'zh-HK': 'zh_chs',\n    'zh-CN': 'zh_chs',  # dead since 2015 / routed to hk.search.yahoo.com\n    'zh-TW': 'zh_cht',\n}\n\nlang2domain = {\n    'zh_chs' : 'hk.search.yahoo.com',\n    'zh_cht' : 'tw.search.yahoo.com',\n    'en'     : 'search.yahoo.com',\n\n    'bg'     : 'search.yahoo.com',\n    'cs'     : 'search.yahoo.com',\n    'da'     : 'search.yahoo.com',\n    'el'     : 'search.yahoo.com',\n    'et'     : 'search.yahoo.com',\n    'he'     : 'search.yahoo.com',\n    'hr'     : 'search.yahoo.com',\n    'ja'     : 'search.yahoo.com',\n    'ko'     : 'search.yahoo.com',\n    'sk'     : 'search.yahoo.com',\n    'sl'     : 'search.yahoo.com',\n\n}\n\"\"\"Map language to domain\"\"\"\n\ndef _get_language(params):\n\n    lang = language_aliases.get(params['language'])\n    if lang is None:\n        lang = match_language(\n            params['language'], supported_languages, language_aliases\n        )\n    lang = lang.split('-')[0]\n    logger.debug(\"params['language']: %s --> %s\" , params['language'], lang)\n    return lang\n\ndef request(query, params):\n    \"\"\"build request\"\"\"\n    offset = (params['pageno'] - 1) * 7 + 1\n    lang  =  _get_language(params)\n    age, btf = time_range_dict.get(\n        params['time_range'], ('', ''))\n\n    args = urlencode({\n        'p' : query,\n        'ei' : 'UTF-8',\n        'fl' : 1,\n        'vl' : 'lang_' + lang,\n        'btf' : btf,\n        'fr2' : 'time',\n        'age' : age,\n        'b' : offset,\n        'xargs' :0\n    })\n\n    domain = lang2domain.get(lang, '%s.search.yahoo.com' % lang)\n    params['url'] = 'https://%s/search?%s' % (domain, args)\n    return params\n\ndef parse_url(url_string):\n    \"\"\"remove yahoo-specific tracking-url\"\"\"\n\n    endings = ['/RS', '/RK']\n    endpositions = []\n    start = url_string.find('http', url_string.find('/RU=') + 1)\n\n    for ending in endings:\n        endpos = url_string.rfind(ending)\n        if endpos > -1:\n            endpositions.append(endpos)\n\n    if start == 0 or len(endpositions) == 0:\n        return url_string\n\n    end = min(endpositions)\n    return unquote(url_string[start:end])\n\ndef response(resp):\n    \"\"\"parse response\"\"\"\n\n    results = []\n    dom = html.fromstring(resp.text)\n\n    # parse results\n    for result in eval_xpath_list(dom, '//div[contains(@class,\"algo-sr\")]'):\n        url = eval_xpath_getindex(result, './/h3/a/@href', 0, default=None)\n        if url is None:\n            continue\n        url = parse_url(url)\n\n        title = eval_xpath_getindex(result, './/h3/a', 0, default=None)\n        if title is None:\n            continue\n        offset = len(extract_text(title.xpath('span')))\n        title = extract_text(title)[offset:]\n\n        content = eval_xpath_getindex(\n            result, './/div[contains(@class, \"compText\")]', 0, default=''\n        )\n        if content:\n            content = extract_text(content)\n\n        # append result\n        results.append({\n            'url': url,\n            'title': title,\n            'content': content\n        })\n\n    for suggestion in eval_xpath_list(dom, '//div[contains(@class, \"AlsoTry\")]//table//a'):\n        # append suggestion\n        results.append({'suggestion': extract_text(suggestion)})\n\n    return results\n\n\n# get supported languages from their site\ndef _fetch_supported_languages(resp):\n    supported_languages = []\n    dom = html.fromstring(resp.text)\n    offset = len('lang_')\n\n    for val in eval_xpath_list(dom, '//div[contains(@class, \"lang-item\")]/input/@value'):\n        supported_languages.append( val[offset:] )\n\n    return supported_languages\n", "path": "searx/engines/yahoo.py"}]}