如何在两个以上的域对象上映射Grails Searchable插件?

时间:2010-10-14 20:00:03

标签: plugins grails mapping searchable

我在我的Grails应用程序中使用了Searchable插件,但在返回有效搜索结果时遇到映射超过2个域对象的问题。我查看了Searchable插件文档,但找不到我的问题的答案。这是我所拥有的域名的一个非常基本的例子:

class Article {

     static hasMany = [tags: ArticleTag]

     String title
     String body
}

class ArticleTag {
     Article article
     Tag tag
}

class Tag {
     String name
}

最终我要做的是能够通过搜索他们的标题,正文和相关标签来找到文章。标题和标签也会得到提升。

映射这些类以达到预期效果的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

可能还有另一种方法,但这是我在我的应用程序中使用的简单方法。我向域对象添加了一个方法,以从标记中获取所有字符串值,并使用Article对象将它们添加到索引中。

这允许我只搜索文章域对象并获得我需要的一切

class Article {

    static searchable = { 
        // don't add id and version to index
        except = ['id', 'version']

        title boost: 2.0
        tag boost:2.0

        // make the name in the index be tag
        tagValues name: 'tag'
    }

     static hasMany = [tags: ArticleTag]


     String title
     String body

    // do not store tagValues in database
    static transients = ['tagValues']

    // create a string value holding all of the tags
    // this will store them with the Article object in the index
    String getTagValues() {
        tags.collect {it.tag}.join(", ")
    }
}