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.

Любые предложения о том, почему поиск по тегам не работает? Я даже пытался вручную индексировать / переиндексировать Person, Tag и PersonTag через domainInstance.reindex(), а также в контроллере с использованием searchableService.

Я ищу людей в другом контроллере PeopleController:

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

1 ответ

Решение

Ну, я нашел способ "исправить проблему", но мне это не нравится (потому что это 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
  }
}
Другие вопросы по тегам