views:

388

answers:

3

Hi,

In my Grails app, I'm using the Searchable plugin for searching/indexing. I want to write a Compass/Lucene query that involves multiple domain classes. Within that query when I want to refer to the id of a class, I can't simply use 'id' because all classes have an 'id' property. Currently, I work around this problem by adding the following property to a class Foo

public Long getFooId() {
    return id
}
static transients = ['fooId']

Then when I want to refer to the id of Foo within a query I use 'fooId'. Is there a way I can provide an alias for a property in the searchable mapping rather than adding a property to the class?

+2  A: 

You can give a more specific name to your id property. See this page for how to do this.

Jean Barmash
+1  A: 

I finally discovered that this is the way to do it:

static searchable = {
    id: name 'fooId'
}
Don
A: 

Thanks! This would work really well, that is, if I could get past the OOM errors the app server seems to throw each time Searchable plugin is installed. These are bubbling up via :

org.compass.gps.CompassGpsException: Failed to index, execution exception; nested exception is java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space

Has anyone configured their Searchable.groovy in grails-app/conf to perform a strict file:/// or mmap:// only configuration using no heap, and indexing say once or twice per day? Search is beyond a nice to have - but the cost of using the database mirroring in Grails (with Oracle 10g) seems memory intensive.

Really small amount of domains to search (4) small database, maybe 1-2gb for this application.

mikesalera
Turns out this was just since there were multiple Grails apps deployed in same Tomcat instance -- just increased PermSize and set the index to bulkIndexOnStartup = "fork" and worked straightaway.
mikesalera