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
module.search=${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.
@Indexed
public class Folder extends Model {
@Field
@Column(unique=true)
public Integer poseidonNumber;
@Field
public String object;
The @Field annotation currently supports only primitive types.
Search the objects
Use the Search helper to build your queries:
Search.search("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 Search.search returns a query object that you can tweak:
Query q = Search.search("object:dogs", Folder.class);
q.orderBy("object")
.page(2,5)
.reverse();
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:
play.search.reindex=enabled
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:
play.search.path=/tmp/myDevApplication
play.search.analyser=org.apache.lucene.analysis.standard.StandardAnalyzer
play.search.path is where the module stores it’s indexes
play.search.analyser is the lucene analyzer class used for indexation.