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