- Play Framework – Elastic Search Module
by Felipe Oliveira
http://geeks.aretotally.in
http://twitter.com/_felipera
Integrate Elastic Search in a Play! Framework Application. This module uses JPA events to notify Elastic Search of events of their own. In Local Mode it embeds a running Elastic Search instance (port 9002 by default).
- Prerequisites
Play! 1.1
- Install the module
Install the elasticsearch module from the modules repository:
`
play install elasticsearch
`
- Enable the module
After installing the module, add the following to your application.conf to enable it:
`
module.elasticsearch=${play.path}/modules/elasticsearch-0.0.2
`
- Configure the module
You need to configure the module by setting these properties in your application.conf:
# Elastic Search
elasticsearch.local=true
elasticsearch.client=false
Local Model is the only supported at this point which embeds an Elastic Search instance with Play!. Elastic Search runs on port 9002.
All of the properties are required.
- Usage
You basically need to add annotation “@ElasticSearchable” to your Model class. It only works for JPA so far.
Example:
`
@ElasticSearchable
@Entity
public class Post extends Model {
public String title;
public Date postedAt;
}
`
- Searching
`
import static org.elasticsearch.index.query.xcontent.FilterBuilders.*;
import static org.elasticsearch.index.query.xcontent.QueryBuilders.*;
org.elasticsearch.client.Client client = ElasticSearch.client();
SearchResponse response = client.prepareSearch(“test”)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(termQuery(“multi”, “test”))
.setFrom(0).setSize(60).setExplain(true))
.execute()
.actionGet();
`
See Elastic Search for more information.
- User Interface
After you start your application (play run), you should have an admin interface automatically running on http://localhost:9000/es-admin/.
- Source Code
Fork it on Github https://github.com/feliperazeek/playframework-elasticsearch.
- Roadmap
-> Add support to external instances using TransportClient.
-> Add different methods of notification (ElasticSearch River, AMQP, JMS)
-> Adding support for non-Jpa models.
- Credits
-> Shay Banon for the great work with Elastic Search and Compass, I have been following his work for a few years, great stuff.
-> Ben Birch (https://github.com/mobz) for the work on the User Interface.