Index and search records using Algolia.
Project description
kinto-algolia forwards the records to Algolia and provides a /search endpoint to query the indexed data.
Install
pip install kinto-algolia
Setup
In the Kinto settings:
kinto.includes = kinto_algolia
kinto.algolia.application_id = YourApplicationID
kinto.algolia.api_key = YourAPIKey
By default, indices names are prefixed with kinto-. You change this with:
kinto.algolia.index_prefix = myprefix
Usage
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": ""
}
Custom index settings
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.
Running the tests
$ make tests
Changelog
0.1.1 (2018-06-06)
Bug fixes
Fix reindex command.
0.1.0 (2018-04-12)
New features
Flush indices when server is flushed
Perform insertions and deletion in bulk for better efficiency
Add heartbeat
Delete indices when buckets and collections are deleted
Support quick search from querystring
Support defining mapping from the algolia:settings property in the collection metadata
Bug fixes
Only index records if the storage transaction is committed
Do not allow to search if no read permission on collection or bucket
Fix empty results response when plugin was enabled after collection creation
Internal changes
Create index when collection is created
Project details
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 kinto_algolia-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa7f2ff1fc9738756e758c46bd3979d886918f1f579c1b4be5a30117a4882a7b |
|
MD5 | 1b2691aadae0402286c5b9caf4676d1e |
|
BLAKE2b-256 | 918f729bf99d23394b3b928a7151f5b89bf59812789a17b767400258a4bb69a3 |