Search templates in elasticsearch
Using search templates simplifies the life of the client searcher. Now she can have an elasticsearch query DSL expert create search templates for him, hiding away all the ugly booleans, weightings, facets and what have you, while she relaxes in his armchair emitting simple searches for ‘beetroot’ or any other favourite vegetable, fish, meats, dairy, or whatever her search domain requires.
Search templates is a brand new feature added to elasticsearch version 1.1. 0. It allows potentially complex search logic to be stored as templates. The user sends a query with the parameters that matters for him, along with the name of a search template, and the supplied parameters will be inserted at the proper place on execution. The template format is moustache, a widely used javascript templating tool.
Cool stuff, you say. How can I use it? And does it really work?
In the current implentation of search templates, you create a JSON request specifying both the template and the parameters.
You can save the templates in the config/scripts folder of your elasticsearch installation, and use the saved query.
The template is saved as config/scripts/ingredientsquery.moustache. This is how my template looked like:
And here is a sample query using this template
To make changes to the template effective, you need to restart elasticsearch.
You would perhaps expect it to be possible to upload a search template using the REST API. Unfortunately, that hasn’t been implemented yet. At the moment, you have to store the search templates in the config/scripts folder in your elasticsearch node. There is an issue registered to add this feature, but in the mean time, our friends over at qbox are helpful as always and offer to manually place the templates where they belong while we wait for elasticsearch version 1.1.1 (or something).
Using this awesome feature, the only reason we still need some middleware between our elasticsearch installation and our browser is to protect the search service from malicious requests. As it so happens, Qbox have recently added a feature that enables public read only access to the elasticsearch query _search endpoint.
This enables us to use the Qbox elasticsearch service directly from the angularjs client for elasticsearch.
Thus we eliminate the need for the searchclient in ruby, and one less server component to care about.
Sounds nice? This is work in progress, so check back every now and then for new blog posts.