我有一个可搜索的模型设置为:
class Tag{
def searchable = true
String name
}
class PersonTag{
static belongsTo = [person: Person]
static searchable = {
tag(component: true)
person(component: true)
}
static PersonTag addTag(String name, Person person){
if(person && person.id){
def tag = Tag.findOrCreate(name)
def t = new PersonTag(tag:tag, person:person)
t.save(flush:true)
return t
}
}
}
class Person{
static searchable = {
name boost: 2.0
tags component:true
}
}我正在做的是通过标签搜索“Person”。当我的服务器启动时,它会对所有内容进行索引,并且所有人的现有标签都可以正常工作。如果我添加了一个新的标签,我无法搜索它,直到服务器重新启动。但是,如果我更改了一个简单的属性,比如人员名称,我可以在没有重新启动的情况下搜索它。我对标记所做的所有更改都要通过PeopleAdminController.
关于为什么标签搜索不起作用,有什么建议吗?我甚至尝试过通过domainInstance.reindex()以及使用searchableService在控制器中手动索引Person、Tag和PersonTag。
我正在搜索不同控制器PeopleController中的人员
def search(){
def result = People.search("${params.q}")
render (view: '/searchable/search.gsp' , model:[searchResult: result])
}发布于 2013-04-18 02:30:53
好吧,我找到了一个“修复问题”的方法,但我不喜欢它(因为它是一个reindexAll())。在我添加标签之后,如果我调用:
searchableService.reindexAll()看起来不错。我不明白为什么下面的方法不起作用:
static PersonTag addTag(String name, Person person){
if(person && person.id){
def tag = Tag.findOrCreate(name)
def t = new PersonTag(tag:tag, person:person)
t.save(flush:true)
t.index()
tag.reindex()
person.reindex()
return t
}
}https://stackoverflow.com/questions/16022175
复制相似问题