Installation and Usage
Install with the usual Lektor toolchain. Within your project, run
lektor plugins add lektor-algolia
You should see a message saying lektor-algolia has been added to the project.
Here's a link to the project on pypi if you want to install through unconventional means.
Next, add an index and an API key with write access to that index to your
Algolia account via their website. Then, in your project file
blog.lektorproject), add the following:
[servers.algolia] name = Algolia enabled = yes target = algolia://<YOUR-INDEX>
For example, if you wanted to deploy to a search index named 'books', you'd make that last line
target = algolia://books
Now, if you call
lektor deploy algolia, Lektor will automatically generate
search indexes but only for discoverable data models that have a boolean field named
that is set to
true. Only user fields
(as opposed system fields)
on a record are uploaded to the index, with the exception of the
We recommending using
url_style = absolute in your project configuration if
you are planning on linking readers to your actual content pages via the search
bar, since relative urls would not be particularly helpful for a global site search.
Read more about url_style in the Lektor docs.
Important: the index must already exist. lektor-algolia won't automatically create the index for you. Algolia has a quick start guide for how to set up your Algolia account and create an index. We recommend making an API key that only has access to this specific index.
You need to prove to Algolia that you have permission to upload to the
index you've chosen. To do this, create a
configs/algolia.ini file in your project root that looks like this:
app_id = <YOUR-APP-ID> api_key = <YOUR-API-KEY>
If you are managing your project via git, make sure to
.gitignore those credentials :).
Or, alternatively, you can pass credentials via the command line while deploying:
lektor deploy <YOUR-INDEX> --username <YOUR-APP-ID> --key <YOUR-API-KEY>
--password are interchangeable for providing credentials.
Pull requests are super useful and encouraged! Once accepted, changes
are published using lektor with
lektor dev publish-plugin.
If you want to hack on the plugin and test it with a lektor project, you can clone this repo or symlink it into the folder
in your project.
Low hanging fruit:
- No intelligent diffing is done right now to see if models have actually been updated (we delete removed models, but resync existing models every time).
- Deploys probably fail for models with certain data types, because the way I am serializing record values is very naive.
- Could do more slick things with configuring what should be indexed where. Could support multiple indexes in one site,
and mappings could be provided via config rather than the existence of an
indexedproperty on models.
- Needs to be much more robust... Should find out what the maximum number of object IDs we can actually pull per request is...
- Tests. Lots and lots of tests. Setup CI server with throway algolia index...
High hanging fruit:
I basically copy-pasta'd lektor-s3 to get started with writing this plugin. Check out this awesome guide for making custom Lektor publishers.