searx/searx/engines/mongodb.py

62 lines
1.3 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
MongoDB engine (Offline)
"""
# pylint: disable=missing-function-docstring
# pylint: disable=import-error
import re
from pymongo import MongoClient
engine_type = 'offline'
paging = True
# mongodb connection variables
host = '127.0.0.1'
port = 27017
username = ''
password = ''
database = None
collection = None
key = None
# engine specific variables
results_per_page = 20
exact_match_only = False
result_template = 'key-value.html'
_client = None
def init(_):
connect()
def connect():
global _client
kwargs = {
'port': port,
}
if username:
kwargs['username'] = username
if password:
kwargs['password'] = password
_client = MongoClient(host, **kwargs)[database][collection]
def search(query, params):
ret = []
if exact_match_only:
q = {'$eq': query}
else:
q = {'$regex': re.compile('.*{0}.*'.format(re.escape(query)), re.I | re.M)}
results = _client.find({key: q})\
.skip((params['pageno'] - 1) * results_per_page)\
.limit(results_per_page)
ret.append({'number_of_results': results.count()})
for r in results:
del r['_id']
r = {str(k): str(v) for k, v in r.items()}
r['template'] = result_template
ret.append(r)
return ret