我有3个域:A,B,C。
A和C通过B有多对多的关系。 A和C是可搜索的。
当我搜索并获取A域列表时,A中的所有字段都可以访问,但是关系字段始终为“null”。为什么我无法访问关系字段?为什么我会'null'?如果我直接访问对象,我会看到一个关系,但是当可搜索返回一个域时,我在关系字段上得到'null'。
PS:我试图使B可搜索,但它看起来像搜索有索引它的问题我没有看到索引B的任何点,因为它只存在为多对多关系。我需要帮助。我需要能够在可搜索的回报中通过A到达C.
谢谢。
[更新]:我今天制作了一个原型项目(小型数据库)并使域B可搜索。现在我可以访问关系字段了。但是在我的实际项目中,我不想让B可搜索,因为数据库很大而索引需要太长时间。有办法解决吗?
答案 0 :(得分:2)
您可以重新筛选结果列表中的所有实例,或使用 reload:true 属性进行搜索方法
searchableService.search(query,[reload:true])
您可以找到完整的选项列表:http://grails.org/Searchable+Plugin+-+Methods+-+search
reload - 如果为true,则从数据库重新加载对象,将它们附加到Hibernate会话,否则从索引重建对象。默认为false
答案 1 :(得分:0)
好的,我相信我解决了我的问题。 第一个结帐链接指向类似的问题:Grails searchable plugin - 请给GalmWing一些信用。
我的解决方案如下,我正在实现自己的控制器,以下代码实现了可搜索的服务调用:
if (params.q) {
try{
def searchResults = searchableService.search(params.q, params)
searchResults.results.each {
it.refresh()
}
return [carInstanceList:searchResults.results, carInstanceTotal:searchResults.total]
} catch (SearchEngineQueryParseException ex) {
return [parseException: true]
}
正如你所看到的,我有一个循环,在每个域“A”上我刷新。现在刷新从DB获得所有链接的真实记录。现在我将列表返回到GSP,它会提取与“A”域相关联的所有“C”域。
现在这样你可能会受到性能损失,但在我的情况下,搜索实际上无法索引“B”域,它工作了一段时间然后崩溃,所以我没有其他选择,至少对于现在