【问题标题】:Lucene /Searchable Plugin - Grails not reindexing has manyLucene /Searchable Plugin - Grails not reindexing 有很多
【发布时间】:2013-04-15 18:24:44
【问题描述】:

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

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

【问题讨论】:

    标签: grails lucene grails-searchable


    【解决方案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
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2013-02-22
      • 2014-12-06
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多