# 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.
