Lucene / Searchable插件 - 没有重新索引的Grails有很多

时间:2013-04-15 18:24:44

标签: grails lucene grails-searchable

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

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()以及使用searchableService在控制器中手动索引/重新索引Person,Tag和PersonTag。

我在另一个控制器PeopleController中搜索人员:

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

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法,但我不喜欢它(因为它是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
  }
}