首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene Grails插件-- /Searchable没有重新建立索引

Lucene Grails插件-- /Searchable没有重新建立索引
EN

Stack Overflow用户
提问于 2013-04-16 02:24:44
回答 1查看 275关注 0票数 0

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

代码语言:javascript
复制
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         
    }
}

我正在做的是通过标签搜索“Person”。当我的服务器启动时,它会对所有内容进行索引,并且所有人的现有标签都可以正常工作。如果我添加了一个新的标签,我无法搜索它,直到服务器重新启动。但是,如果我更改了一个简单的属性,比如人员名称,我可以在没有重新启动的情况下搜索它。我对标记所做的所有更改都要通过PeopleAdminController.

关于为什么标签搜索不起作用,有什么建议吗?我甚至尝试过通过domainInstance.reindex()以及使用searchableService在控制器中手动索引Person、Tag和PersonTag。

我正在搜索不同控制器PeopleController中的人员

代码语言:javascript
复制
def search(){
    def result = People.search("${params.q}")
        render (view: '/searchable/search.gsp' , model:[searchResult: result])
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-18 02:30:53

好吧,我找到了一个“修复问题”的方法,但我不喜欢它(因为它是一个reindexAll())。在我添加标签之后,如果我调用:

代码语言:javascript
复制
searchableService.reindexAll()

看起来不错。我不明白为什么下面的方法不起作用:

代码语言:javascript
复制
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
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16022175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档