You are viewing the documentation for Play 1. The documentation for Play 2 is here.

Search module

The Search module allows you to have basic full text search functionalities to your JPA Model. It is based on Lucene, and requires a real file system to store its indexes.

Enable the module

In the /conf/application.conf file, enable the Search module by adding this line:

# The search module${play.path}/modules/search

Indexing your objects

Use the @Indexed annotation to mark your Model, and then use the @Field to mark the fields to be indexed.

public class Folder extends Model {
    public Integer poseidonNumber; 
    public String object;

The @Field annotation currently supports only primitive types.

Search the objects

Use the Search helper to build your queries:"object:dogs", Folder.class)

The first parameter is a lucene query and the second is your Model class. You may want to refer to the Lucene query documentation at this point, knowing that the Search maintains a separated index per class and adds the properties marked with @Field as a Lucene Field.

The returns a query object that you can tweak:

Query q ="object:dogs", Folder.class);

To finish your query, if you wish to retrieve your Model objects, use

List<Folder> folders = q.fetch();

or to get only ids (to use in a JPA query by example...):

List<Long> folderIds = q.fetchIds();

To get full informations (like relevance), you would use:

List<QueryResult> results = q.executeQuery();

Maintaining the indexes

Each time you create, update or delete your Model objects, the corresponding index is automatically updated.

Should you need to re-index your objects (like if you have manually modified your database), you will reboot your application with:

In your conf/application.conf. Don’t forget to remove it after!

Misc configuration

You can use the following properties in your conf/application.conf file: is where the module stores it’s indexes is the lucene analyzer class used for indexation.