0

次のように検索可能なモデルを設定しています。

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])
}
4

1 に答える 1

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
  }
}
于 2013-04-17T18:30:53.067 に答える