Algolia Search integration for Django
Project description
Algolia Search for Django
==================
This package let you easily integrate the Algolia Search API to your favorite ORM. It's based on the [algoliasearch-client-python](https://github.com/algolia/algoliasearch-client-python) package.
You might be interested in the sample Django application providing a typeahead.js based auto-completion and Google-like instant search: [algoliasearch-django-example](https://github.com/algolia/algoliasearch-django-example)
Compatible with **Python 2.7**, **Python 3.2+** and **Django 1.7+**
[](https://travis-ci.org/algolia/algoliasearch-django)
[](https://coveralls.io/r/algolia/algoliasearch-django)
[](http://badge.fury.io/py/algoliasearch-django)
Table of Content
-------------
**Get started**
1. [Install](#install)
1. [Setup](#setup)
1. [Quick Start](#quick-start)
1. [Commands](#commands)
1. [Search](#search)
1. [Geo-search](#geo-search)
1. [Tags](#tags)
1. [Options](#options)
Install
-------------
```sh
pip install algoliasearch-django
```
Setup
-------------
In your Django settings, add `django.contrib.algoliasearch` to `INSTALLED_APPS` and add two settings:
```python
ALGOLIA = {
'APPLICATION_ID': 'MyAppID',
'API_KEY': 'MyApiKey'
}
```
There is also two optionals settings that take a string:
* `INDEX_PREFIX`: prefix all index. You can use it to seperate different application, like `site1_Products` and `site2_Products`.
* `INDEX_SUFFIX`: suffix all index. You can use it to differenciate development and production environement, like `Location_dev` and `Location_prod`.
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`).
```python
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.
```python
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 separeted file, like `index.py`.
```python
from django.contrib.algoliasearch import AlgoliaIndex
class YourModelIndex(AlgoliaIndex):
fields = ('name', 'date')
geo_field = 'location'
settings = {'attributesToIndex': ['name']}
index_name = 'my_index'
```
And then replace `algoliasearch.register(YourModel)` with `algoliasearch.register(YourModel, YourModelIndex)`.
## 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.
* `python manage.py algolia_applysettings`: (re)apply the index settings.
* `python manage.py algolia_clearindex`: clear the index
## Search
We recommend the usage of our [JavaScript API Client](https://github.com/algolia/algoliasearch-client-js) 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.
```python
from django.contrib.algoliasearch import raw_search
params = { "hitsPerPage": 5 }
raw_search(Contact, "jim", params)
```
## Geo-Search
Use the `geo_field` attribute to localize your record. `geo_field` should be a callable that returns a tuple (latitude, longitude).
```python
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)
```
# Tags
Use the `tags` attributes to add tags to your record. It can be a field or a callable.
```python
class ArticleIndex(AlgoliaIndex):
tags = 'category'
```
At query time, specify `{ tagFilters: 'tagvalue' }` or `{ tagFilters: ['tagvalue1', 'tagvalue2'] }` as search parameters to restrict the result set to specific tags.
# 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.
```python
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.
```python
class ContactIndex(algoliaindex):
index_name = 'Entreprise'
```
## Index settings
We provide many ways to configure your index allowing you to tune your overall index relevancy. All the configuration are explained on [our website](https://www.algolia.com/doc/python#Settings).
```python
class ArticleIndex(AlgoliaIndex):
settings = {
'attributesToIndex': ['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.
```python
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'
```
==================
This package let you easily integrate the Algolia Search API to your favorite ORM. It's based on the [algoliasearch-client-python](https://github.com/algolia/algoliasearch-client-python) package.
You might be interested in the sample Django application providing a typeahead.js based auto-completion and Google-like instant search: [algoliasearch-django-example](https://github.com/algolia/algoliasearch-django-example)
Compatible with **Python 2.7**, **Python 3.2+** and **Django 1.7+**
[](https://travis-ci.org/algolia/algoliasearch-django)
[](https://coveralls.io/r/algolia/algoliasearch-django)
[](http://badge.fury.io/py/algoliasearch-django)
Table of Content
-------------
**Get started**
1. [Install](#install)
1. [Setup](#setup)
1. [Quick Start](#quick-start)
1. [Commands](#commands)
1. [Search](#search)
1. [Geo-search](#geo-search)
1. [Tags](#tags)
1. [Options](#options)
Install
-------------
```sh
pip install algoliasearch-django
```
Setup
-------------
In your Django settings, add `django.contrib.algoliasearch` to `INSTALLED_APPS` and add two settings:
```python
ALGOLIA = {
'APPLICATION_ID': 'MyAppID',
'API_KEY': 'MyApiKey'
}
```
There is also two optionals settings that take a string:
* `INDEX_PREFIX`: prefix all index. You can use it to seperate different application, like `site1_Products` and `site2_Products`.
* `INDEX_SUFFIX`: suffix all index. You can use it to differenciate development and production environement, like `Location_dev` and `Location_prod`.
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`).
```python
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.
```python
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 separeted file, like `index.py`.
```python
from django.contrib.algoliasearch import AlgoliaIndex
class YourModelIndex(AlgoliaIndex):
fields = ('name', 'date')
geo_field = 'location'
settings = {'attributesToIndex': ['name']}
index_name = 'my_index'
```
And then replace `algoliasearch.register(YourModel)` with `algoliasearch.register(YourModel, YourModelIndex)`.
## 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.
* `python manage.py algolia_applysettings`: (re)apply the index settings.
* `python manage.py algolia_clearindex`: clear the index
## Search
We recommend the usage of our [JavaScript API Client](https://github.com/algolia/algoliasearch-client-js) 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.
```python
from django.contrib.algoliasearch import raw_search
params = { "hitsPerPage": 5 }
raw_search(Contact, "jim", params)
```
## Geo-Search
Use the `geo_field` attribute to localize your record. `geo_field` should be a callable that returns a tuple (latitude, longitude).
```python
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)
```
# Tags
Use the `tags` attributes to add tags to your record. It can be a field or a callable.
```python
class ArticleIndex(AlgoliaIndex):
tags = 'category'
```
At query time, specify `{ tagFilters: 'tagvalue' }` or `{ tagFilters: ['tagvalue1', 'tagvalue2'] }` as search parameters to restrict the result set to specific tags.
# 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.
```python
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.
```python
class ContactIndex(algoliaindex):
index_name = 'Entreprise'
```
## Index settings
We provide many ways to configure your index allowing you to tune your overall index relevancy. All the configuration are explained on [our website](https://www.algolia.com/doc/python#Settings).
```python
class ArticleIndex(AlgoliaIndex):
settings = {
'attributesToIndex': ['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.
```python
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'
```
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file algoliasearch-django-1.2.0.tar.gz.
File metadata
- Download URL: algoliasearch-django-1.2.0.tar.gz
- Upload date:
- Size: 8.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f58b3c64e826842f44422d62ce6113604cffd46df9da9d9a8f0024a95d466e9e
|
|
| MD5 |
86864bd5eac0f06cd5fe45b8105a9445
|
|
| BLAKE2b-256 |
ed85bcaf957b46aed26b3ec8637eb0f6f3f5cfacc446cade20c1851d1983c03b
|
File details
Details for the file algoliasearch_django-1.2.0-py2.py3-none-any.whl.
File metadata
- Download URL: algoliasearch_django-1.2.0-py2.py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee5cd80bf8e2561bd5650b8055ac82270a9f57206c22097acc1e653b40cf5050
|
|
| MD5 |
75eaeb9c51df866dd297c8999c455b6b
|
|
| BLAKE2b-256 |
65959cb272227a585d7e8a84b10e08706e604d63ccdde8b8cd6072c473916b9c
|