我在我的Grails应用程序中使用了Searchable插件,但在返回有效搜索结果时遇到映射超过2个域对象的问题。我查看了Searchable插件文档,但找不到我的问题的答案。这是我所拥有的域名的一个非常基本的例子:
class Article {
static hasMany = [tags: ArticleTag]
String title
String body
}
class ArticleTag {
Article article
Tag tag
}
class Tag {
String name
}
最终我要做的是能够通过搜索他们的标题,正文和相关标签来找到文章。标题和标签也会得到提升。
映射这些类以达到预期效果的正确方法是什么?
答案 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(", ")
}
}