diff options
| author | Markus Heiser <markus.heiser@darmarit.de> | 2025-03-05 17:50:22 +0100 |
|---|---|---|
| committer | Markus Heiser <markus.heiser@darmarIT.de> | 2025-03-15 10:36:33 +0100 |
| commit | f49b2c94a9a9938133dbf94d686f00776ce96cdc (patch) | |
| tree | 7b74aa959100bd85054251221981039d185bc50e /searx/engines/redis_server.py | |
| parent | af5dbdf768d56d26669a54e532bef3238e3de2e4 (diff) | |
[mod] migrate all key-value.html templates to KeyValue type
The engines now all use KeyValue results and return the results in a
EngineResults object.
The sqlite engine can return MainResult results in addition to KeyValue
results (based on engine's config in settings.yml),
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Diffstat (limited to 'searx/engines/redis_server.py')
| -rw-r--r-- | searx/engines/redis_server.py | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/searx/engines/redis_server.py b/searx/engines/redis_server.py index 3268378c6..eebb5809b 100644 --- a/searx/engines/redis_server.py +++ b/searx/engines/redis_server.py @@ -36,6 +36,8 @@ Implementations import redis # pylint: disable=import-error +from searx.result_types import EngineResults + engine_type = 'offline' # redis connection variables @@ -46,7 +48,6 @@ db = 0 # engine specific variables paging = False -result_template = 'key-value.html' exact_match_only = True _redis_client = None @@ -63,30 +64,25 @@ def init(_engine_settings): ) -def search(query, _params): +def search(query, _params) -> EngineResults: + res = EngineResults() + if not exact_match_only: - return search_keys(query) - - ret = _redis_client.hgetall(query) - if ret: - ret['template'] = result_template - return [ret] - - if ' ' in query: - qset, rest = query.split(' ', 1) - ret = [] - for res in _redis_client.hscan_iter(qset, match='*{}*'.format(rest)): - ret.append( - { - res[0]: res[1], - 'template': result_template, - } - ) - return ret - return [] - - -def search_keys(query): + for kvmap in search_keys(query): + res.add(res.types.KeyValue(kvmap=kvmap)) + return res + + kvmap: dict[str, str] = _redis_client.hgetall(query) + if kvmap: + res.add(res.types.KeyValue(kvmap=kvmap)) + elif " " in query: + qset, rest = query.split(" ", 1) + for row in _redis_client.hscan_iter(qset, match='*{}*'.format(rest)): + res.add(res.types.KeyValue(kvmap={row[0]: row[1]})) + return res + + +def search_keys(query) -> list[dict]: ret = [] for key in _redis_client.scan_iter(match='*{}*'.format(query)): key_type = _redis_client.type(key) @@ -98,7 +94,6 @@ def search_keys(query): res = dict(enumerate(_redis_client.lrange(key, 0, -1))) if res: - res['template'] = result_template res['redis_key'] = key ret.append(res) return ret |