Algolia Search integration for Django
Project description
Algolia Search API Client for Django
Algolia Search is a hosted full-text, numerical, and faceted search engine capable of delivering realtime results from the first keystroke.
This package lets you easily integrate the Algolia Search API to your Django project. It’s based on the algoliasearch-client-python package.
You might be interested in this sample Django application providing a typeahead.js based auto-completion and Google-like instant search: algoliasearch-django-example
Compatible with Python 2.7, Python 3.3+ and Django 1.7+
API Documentation
You can find the full reference on Algolia’s website.
Table of Contents
`Setup <#setup>`__
`Commands <#commands>`__
`Search <#search>`__
`Geo-Search <#geo-search>`__
`Tags <#tags>`__
`Options <#options>`__
Custom ``objectID` <#custom-objectid>`__
`Tests <#tests>`__
Setup
Install
pip install algoliasearch-django
Setup
In your Django settings, add django.contrib.algoliasearch to INSTALLED_APPS and add these two settings:
ALGOLIA = {
'APPLICATION_ID': 'MyAppID',
'API_KEY': 'MyApiKey'
}
There are three optional settings:
INDEX_PREFIX: prefix all indexes. Use it to separate different applications, like site1_Products and site2_Products.
INDEX_SUFFIX: suffix all indexes. Use it to differenciate development and production environment, like Location_dev and Location_prod.
AUTO_INDEXING: automatically synchronize the models with Algolia (default to True).
Quick Start
Simply call algoliasearch.register() for each of the models you want to index. A good place to do this is in your application’s AppConfig (generally named apps.py). More info in the documentation
from django.apps import AppConfig
from django.contrib import algoliasearch
class YourAppConfig(AppConfig):
name = 'your_app'
def ready(self):
YourModel = self.get_model('your_model')
algoliasearch.register(YourModel)
And then, don’t forget the line below in the __init__.py file of your Django application.
default_app_config = 'your_django_app.apps.YourAppConfig'
By default, all the fields of your model will be used. You can configure the index by creating a subclass of AlgoliaIndex. A good place to do this is in a separate file, like index.py.
from django.contrib.algoliasearch import AlgoliaIndex
class YourModelIndex(AlgoliaIndex):
fields = ('name', 'date')
geo_field = 'location'
settings = {'searchableAttributes': ['name']}
index_name = 'my_index'
And then replace algoliasearch.register(YourModel) with algoliasearch.register(YourModel, YourModelIndex).
Commands
Commands
python manage.py algolia_reindex: reindex all the registered models. This command will first send all the record to a temporary index and then moves it.
you can pass --model parameter to reindex a given model
python manage.py algolia_applysettings: (re)apply the index settings.
python manage.py algolia_clearindex: clear the index
Search
Search
We recommend the usage of our JavaScript API Client to perform queries directly from the end-user browser without going through your server.
However, if you want to search from your backend you can use the raw_search(YourModel, 'yourQuery', params) method. It retrieves the raw JSON answer from the API.
from django.contrib.algoliasearch import raw_search
params = { "hitsPerPage": 5 }
raw_search(Contact, "jim", params)
Geo-Search
Geo-Search
Use the geo_field attribute to localize your record. geo_field should be a callable that returns a tuple (latitude, longitude).
class Contact(models.model):
name = models.CharField(max_lenght=20)
lat = models.FloatField()
lng = models.FloatField()
def location(self):
return (self.lat, self.lng)
class ContactIndex(AlgoliaIndex):
fields = 'name'
geo_field = 'location'
algoliasearch.register(Contact, ContactIndex)
Options
Custom objectID
You can choose which field will be used as the objectID. The field should be unique and can be a string or integer. By default, we use the pk field of the model.
class ArticleIndex(AlgoliaIndex):
custom_objectID = 'post_id'
Custom index name
You can customize the index name. By default, the index name will be the name of the model class.
class ContactIndex(algoliaindex):
index_name = 'Enterprise'
Index settings
We provide many ways to configure your index allowing you to tune your overall index relevancy. All the configuration is explained on our doc.
class ArticleIndex(AlgoliaIndex):
settings = {
'searchableAttributes': ['name', 'description', 'url'],
'customRanking': ['desc(vote_count)', 'asc(name)']
}
Restrict indexing to a subset of your data
You can add constraints controlling if a record must be indexed or not. should_index should be a callable that returns a boolean.
class Contact(models.model):
name = models.CharField(max_lenght=20)
age = models.IntegerField()
def is_adult(self):
return (self.age >= 18)
class ContactIndex(AlgoliaIndex):
should_index = 'is_adult'
Tests
Run Tests
To run the tests, first find your Algolia application id and Admin API key (found on the Credentials page).
ALGOLIA_APPLICATION_ID={APPLICATION_ID} ALGOLIA_API_KEY={ADMIN_API_KEY} tox
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for algoliasearch-django-1.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4660bba695be710a3a234cc183ff6cb2d359ca2dc633b6ba6db5bf72263a7c67 |
|
MD5 | c0ee1bcdc4ea2361e68f161ad71dfd28 |
|
BLAKE2b-256 | d0619d708c46584d80c66f416594349bab3f9f60c704dd9defb45e544f6c7957 |
Hashes for algoliasearch_django-1.3.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 35a126b741e0f584054eea037a83437d92769fd96ac24f6ed7d25de41eababbe |
|
MD5 | bf2924db06469ba26bd2e58c96119601 |
|
BLAKE2b-256 | c7e18e246d8821eda4c72aef3c4823c44215271209adb1e69f6710532ac62501 |