Metadata-Version: 2.1
Name: algoliaqb
Version: 0.0.9
Summary: Algolia Query Builder
Home-page: http://github.com/ryanb58/algoliaqb
Author: Taylor Brazelton
Author-email: taylor.r.brazelton@gmail.com
License: MIT
Keywords: search algolia query builder
Platform: UNKNOWN


Algolia Query Builder
=====================

A library to help build queries for searching Algolia.

This package is meant to be used with the `algoliasearch <https://github.com/algolia/algoliasearch-client-python>`_ library.


.. image:: https://badge.fury.io/py/algoliaqb.svg
   :target: https://badge.fury.io/py/algoliaqb
   :alt: PyPI version


Problem:
^^^^^^^^

An app I have been working on has a few points of code duplication and increased complexity. This package is a way for me to fix those issues and increase readability.

Installation
^^^^^^^^^^^^

.. code-block::

   pip install algoliaqb

Filter Strings
^^^^^^^^^^^^^^

By default ``filter_map`` considers all input as strings. This is pretty straight forward. Lets say for example you have the following filter map:

.. code-block::

   filter_map = {
       "group_id": "tenant_id",
   }

with the following ``flask.args``\ :

.. code-block::

   {
       "group_id": 1
   }

AlgoliaQB will look for ``group_id`` within ``flask.args``\ , grab the value, then remap the key and value for you.

.. code-block::

   tenant_id:1

Now lets try an example with a few more filters.

.. code-block::

   filter_map = {
       "group_id": "tenant_id",
       "is_reported": "is_reported"
   }

with the following ``flask.args``\ :

.. code-block::

   {
       "group_id": 1,
       "is_reported": "true
   }

The returned filter_string is as follows.

.. code-block::

   tenant_id:1 AND is_reported:true

Library Usage Example:
^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: python

   from algoliasearch.search_client import SearchClient
   from algoliaqb import AlgoliaQueryBuilder
   from flask import request


   aqb = AlgoliaQueryBuilder(
       search_param="search",
       filter_map={
           "group_id": "tenant_id",
           "is_reported": "is_reported"
       }
   )

   # Extract the search query from our flask apps request.args var.
   search_query = aqb.get_search_query(request.args)
   # Get the filter query from our request args.
   filter_query = aqb.get_filter_query(request.args)

   # Now that we have the filter string, we just pass it into the search function.

   search_client = SearchClient()
   index = search_client.init_index("contacts")
   results = index.search(search_query, {"filters": filter_query})


