Lucene /Searchable Plugin - Grails不重新索引有很多



我有一个可搜索的模型设置为:

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         
    }
}

我正在做的是按标签搜索"人物"。当我的服务器启动它索引一切和所有现有的标签上的人的工作。如果我添加了一个新标签,在服务器重新启动之前我无法搜索到它。但是,如果我更改一个简单的属性,如人名,我就可以在不重新启动的情况下搜索它。我对标签的所有更改都要经过PeopleAdminController.

关于为什么按标签搜索不工作有什么建议吗?我甚至尝试通过domainInstance.reindex()手动索引/重新索引Person, Tag和PersonTag,以及在控制器中使用searchableService。

我正在寻找不同控制器PeopleController中的人:

def search(){
    def result = People.search("${params.q}")
        render (view: '/searchable/search.gsp' , model:[searchResult: result])
}

嗯,我找到了一种方法来"解决这个问题",但我不喜欢它(因为它是一个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
  }
}

相关内容

  • 没有找到相关文章

最新更新