代码之家  ›  专栏  ›  技术社区  ›  Dónal

Grails可搜索插件

  •  2
  • Dónal  · 技术社区  · 15 年前

    在我的Grails应用程序中,我有一个由Searchable插件索引的域类:

    class Foo implements Serializable {
    
        BookletCategory bookletCategory
        Date lastUpdated
        static hasMany = [details: BookletRootDetail]
    
        static searchable = {
            bookletCategory component: true
            id name: 'bookletRootId'
            lastUpdated index: 'no'
        }
    }
    

    当我检索这个类的实例时,details属性总是空的,即使数据库中有details实例。我的结论是details字段没有存储在Lucene索引中。我尝试将此字段添加到索引中,但不使其成为可搜索属性,方法是将以下内容添加到searchable闭包中:

    details index: 'no'
    

    但是,这似乎只对简单的属性有效,比如lastUpdated。当我从索引中检索Foo实例时,有没有任何方法可以确保填充这个属性?理想情况下,我想做这件事,而不实际使细节搜索字段?

    3 回复  |  直到 13 年前
        1
  •  1
  •   GalmWing    12 年前

    好吧,你不能检索一个本身不可搜索的对象,这就是它的工作原理,因为你没有真正接触到数据库与可搜索插件。所以你有两个选择:

    1. 使“详细信息”可搜索(这显然是您不希望的)。
    2. Refresh refresh() 对于列表中的每一个对象,它意味着对数据库的查询,这是低效的。

    目前,这个问题没有其他解决办法。

        2
  •  0
  •   Jean Barmash    15 年前

    我不认为你能做你想做的事。假设BookletRootDetail有一个belongsTo子句(即引用回父对象),您可以索引id,并对与Foo的id对应的详细信息进行第二次搜索查询。

        3
  •  0
  •   Maricel    13 年前

    比如:

    class Foo implements Serializable {
    
        BookletCategory bookletCategory
        Date lastUpdated
        static hasMany = [details: BookletRootDetail]
    
        static searchable = {
            bookletCategory component: true
            id name: 'bookletRootId'
            lastUpdated index: 'no'
            details component: true
        }
    }
    

    那么

    class BookletRootDetail {
      static searchable = true
    }