在我的Grails应用程序中,我使用Searchable插件进行搜索/索引。我想写一个涉及多个域类的Compass / Lucene查询。在该查询中,当我想引用类的id时,我不能简单地使用'id',因为所有类都具有'id'属性。目前,我通过将以下属性添加到类Foo
来解决此问题public Long getFooId() {
return id
}
static transients = ['fooId']
然后,当我想在查询中引用Foo的id时,我使用'fooId'。有没有办法可以在可搜索的映射中为属性提供别名,而不是在类中添加属性?
答案 0 :(得分:2)
您可以为id属性指定更具体的名称。有关如何执行此操作,请参阅this page。
答案 1 :(得分:1)
我终于发现这是做到这一点的方法:
static searchable = {
id: name 'fooId'
}
答案 2 :(得分:0)
谢谢!这可以很好地工作,也就是说,如果我可以通过OOM错误,应用服务器似乎每次安装Searchable插件时抛出。这些是通过以下方式冒泡的:
org.compass.gps.CompassGpsException:索引失败,执行异常;嵌套异常是java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:Java堆空间
有没有人在grails-app / conf中配置他们的Searchable.groovy来执行严格的文件:///或mmap://只使用没有堆的配置,索引每天说一次或两次?搜索是一件好事 - 但在Grails(使用Oracle 10g)中使用数据库镜像的成本似乎是内存密集型的。
搜索的域数量非常少(4)小型数据库,此应用程序可能为1-2gb。