kinto-algolia forwards the records to Algolia and provides a /search
endpoint to query the indexed data.
pip install kinto-algolia
In the Kinto settings:
kinto.includes = kinto_algolia
kinto.algolia.application_id = YourApplicationID
kinto.algolia.api_key = YourAPIKey
# List of buckets/collections to show:
kinto.algolia.resources = /buckets/chefclub-v2
/buckets/chefclub/collections/recipes
By default, indices names are prefixed with kinto-
. You change this with:
kinto.algolia.index_prefix = myprefix
Create a new record:
$ echo '{"data": {"id": "1008855320", "last_modified": 1523349594783, "title": "kinto", "description": "A database for the web", "_geoloc": {"lng": -73.778925, "lat": 40.639751}}' | \ http POST http://localhost:8888/v1/buckets/example/collections/notes/records \ --auth token:alice-token
It should now be possible to search for it using the Algolia API.
For example, using a quick querystring search:
$ http "http://localhost:8888/v1/buckets/example/collections/notes/search?query=kinto+database" \ --auth token:alice-token
Or an advanced search using request body:
$ echo '{"insideBoundingBox": "46.650828100116044,7.123046875,45.17210966999772,1.009765625"}' | \ http POST http://localhost:8888/v1/buckets/example/collections/notes/search \ --auth token:alice-token
HTTP/1.1 200 OK
Access-Control-Expose-Headers: Retry-After, Content-Length, Alert, Backoff
Content-Length: 333
Content-Type: application/json; charset=UTF-8
Date: Wed, 20 Jan 2016 12:02:05 GMT
Server: waitress
{
"hits": [
{
"_geoloc": {
"lat": 40.639751,
"lng": -73.778925
},
"_highlightResult": {
"title": {
"matchLevel": "none",
"matchedWords": [],
"value": "Kinto"
}
},
"last_modified": 1523349594783,
"title": "Kinto",
"description": "A database for the web",
"objectID": "1008855320"
}
],
"hitsPerPage": 1000,
"nbHits": 1,
"nbPages": 1,
"page": 0,
"params": "insideBoundingBox=42.124710287101955%2C9.335632324218752%2C41.47360232634395%2C14.403076171875002&hitsPerPage=10000&query=",
"processingTimeMS": 2,
"query": ""
}
By default, Algolia infers the data types from the indexed records.
But it's possible to define the index mappings (ie. schema) from the collection metadata,
in the algolia:settings
property:
$ echo '{
"attributesToIndex": ["title", "description"]
}' | http PATCH "http://localhost:8888/v1/buckets/blog/collections/builds" \
--auth token:admin-token --verbose
Refer to Algolia official documentation for more information about settings.
$ make tests