2013-04-15 30 views
0

我有一個搜索模式設置爲:的Lucene /檢索插件 - 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()以及控制器中的searchableService手動索引/重新索引Person,Tag和PersonTag。

我在不同的控制器PeopleController搜索人員:

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

回答

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