1

我有 3 个域:A、B、C。

A 和 C 通过 B 具有多对多关系。 A 和 C 是可搜索的。

当我搜索并获取 A 域列表时,A 中的所有字段都可以访问,但是关系字段始终为“空”。为什么我无法访问关系字段?为什么我会得到“空”?如果我直接访问对象,我会看到一个关系,但是当可搜索返回 A 域时,我在关系字段上得到“null”。

PS:我试图使 B 可搜索,但看起来可搜索在索引它上面有问题,我没有看到索引 B 的任何意义,因为它的存在只是为了多对多关系。

请我需要帮助。我需要能够以可搜索的返回值通过 A 到达 C。

谢谢你。

[更新]:我今天做了一个原型项目(小型数据库)并使域 B 可搜索。现在我可以访问关系字段。但是在我的实际项目中,我不想让 B 可搜索,因为数据库很大并且索引时间太长。有办法解决吗?

4

2 回答 2

2

您可以刷新结果列表中的所有实例或使用reload:true属性进行 seach 方法

searchableService.search(query,[reload:true]) 

您可以找到完整的选项列表:http: //grails.org/Searchable+Plugin+-+Methods+-+search

reload - 如果为 true,则从数据库重新加载对象,将它们附加到 Hibernate 会话,否则从索引重建对象。默认为假

于 2014-02-19T18:56:18.800 回答
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”的每个项目上我都会刷新。现在刷新从数据库中获取所有链接的真实记录。现在我将列表返回到 GSP,它会提取与“A”域关联的所有“C”域。

现在这样你可能会受到性能损失,但在我的情况下,searchable 实际上无法索引“B”域,它工作了一段时间然后崩溃,所以我没有其他选择,至少现在是这样。

于 2012-12-23T04:12:50.933 回答