| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | # SPDX-License-Identifier: AGPL-3.0-or-later# lint: pylint""".. sidebar:: info   - :origin:`meilisearch.py <searx/engines/meilisearch.py>`   - `MeiliSearch <https://www.meilisearch.com>`_   - `MeiliSearch Documentation <https://docs.meilisearch.com/>`_   - `Install MeiliSearch     <https://docs.meilisearch.com/learn/getting_started/installation.html>`_MeiliSearch_ is aimed at individuals and small companies.  It is designed forsmall-scale (less than 10 million documents) data collections.  E.g. it is greatfor storing web pages you have visited and searching in the contents later.The engine supports faceted search, so you can search in a subset of documentsof the collection.  Furthermore, you can search in MeiliSearch_ instances thatrequire authentication by setting ``auth_token``.Example=======Here is a simple example to query a Meilisearch instance:.. code:: yaml  - name: meilisearch    engine: meilisearch    shortcut: mes    base_url: http://localhost:7700    index: my-index    enable_http: true"""# pylint: disable=global-statementfrom json import loads, dumpsbase_url = 'http://localhost:7700'index = ''auth_key = ''facet_filters = []_search_url = ''result_template = 'key-value.html'categories = ['general']paging = Truedef init(_):    if index == '':        raise ValueError('index cannot be empty')    global _search_url    _search_url = base_url + '/indexes/' + index + '/search'def request(query, params):    if auth_key != '':        params['headers']['X-Meili-API-Key'] = auth_key    params['headers']['Content-Type'] = 'application/json'    params['url'] = _search_url    params['method'] = 'POST'    data = {        'q': query,        'offset': 10 * (params['pageno'] - 1),        'limit': 10,    }    if len(facet_filters) > 0:        data['facetFilters'] = facet_filters    params['data'] = dumps(data)    return paramsdef response(resp):    results = []    resp_json = loads(resp.text)    for result in resp_json['hits']:        r = {key: str(value) for key, value in result.items()}        r['template'] = result_template        results.append(r)    return results
 |