summaryrefslogtreecommitdiff
path: root/searx/engines/solr.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/engines/solr.py')
-rw-r--r--searx/engines/solr.py35
1 files changed, 15 insertions, 20 deletions
diff --git a/searx/engines/solr.py b/searx/engines/solr.py
index 4b80d5729..b23cbe92e 100644
--- a/searx/engines/solr.py
+++ b/searx/engines/solr.py
@@ -29,9 +29,10 @@ This is an example configuration for searching in the collection
# pylint: disable=global-statement
-from json import loads
from urllib.parse import urlencode
from searx.exceptions import SearxEngineAPIException
+from searx.result_types import EngineResults
+from searx.extended_types import SXNG_Response
base_url = 'http://localhost:8983'
@@ -72,27 +73,21 @@ def request(query, params):
return params
-def response(resp):
- resp_json = __get_response(resp)
-
- results = []
- for result in resp_json['response']['docs']:
- r = {key: str(value) for key, value in result.items()}
- if len(r) == 0:
- continue
- r['template'] = 'key-value.html'
- results.append(r)
-
- return results
-
-
-def __get_response(resp):
+def response(resp: SXNG_Response) -> EngineResults:
try:
- resp_json = loads(resp.text)
+ resp_json = resp.json()
except Exception as e:
raise SearxEngineAPIException("failed to parse response") from e
- if 'error' in resp_json:
- raise SearxEngineAPIException(resp_json['error']['msg'])
+ if "error" in resp_json:
+ raise SearxEngineAPIException(resp_json["error"]["msg"])
+
+ res = EngineResults()
+
+ for result in resp_json["response"]["docs"]:
+ kvmap = {key: str(value) for key, value in result.items()}
+ if not kvmap:
+ continue
+ res.add(res.types.KeyValue(kvmap=kvmap))
- return resp_json
+ return res