From 198aad43e0e46cadaa813e52a0ee6153aa5c7b29 Mon Sep 17 00:00:00 2001 From: Adam Tauber Date: Mon, 5 Jul 2021 19:35:25 +0200 Subject: [PATCH] [enh] add mongodb offline engine --- searx/engines/mongodb.py | 61 ++++++++++++++++++++++++++++++++++++++++ searx/settings.yml | 13 +++++++++ 2 files changed, 74 insertions(+) create mode 100644 searx/engines/mongodb.py diff --git a/searx/engines/mongodb.py b/searx/engines/mongodb.py new file mode 100644 index 00000000..cbbc80a6 --- /dev/null +++ b/searx/engines/mongodb.py @@ -0,0 +1,61 @@ +# 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 diff --git a/searx/settings.yml b/searx/settings.yml index b89da2d3..3284c985 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -759,6 +759,19 @@ engines: 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 +# results_per_page : 20 +# database : 'business' +# collection : 'reviews' # name of the db collection +# key : 'name' # key in the collection to search for + - name : npm engine : json_engine paging : True