简体   繁体   中英

Grails searchable plugin with hasMany

I am using grails searchable plugin to search my domain classes. However, I cannot yet search by my hasMany (skills and interests) fields even though they are of the simple type String. This is my domain class:

class EmpactUser {

static searchable = [except: ['dateCreated','password','enabled','accountExpired','accountLocked','passwordExpired']]

String username
String password
boolean enabled = true
boolean accountExpired
boolean accountLocked
boolean passwordExpired

String email
String firstName
String lastName

String address
String phoneNumber
String description

byte[] avatar
byte[] resume

Date dateCreated

    static hasMany = [
        skills : String,
        interests : String, // each user has the ability to list many skills and interests so that they can be matched with a project.
]

static constraints = {
    username blank: false, unique: true
    password blank: false
    email email: true, blank: false

    firstName blank: false
    lastName blank: false

    description nullable: true
    address nullable: true
    avatar nullable: true, maxSize: 1024 * 1024 * 10
    resume nullable: true, maxSize: 1024 * 1024 * 10
    phoneNumber nullable: true, matches: "/[(][+]d{3}[)]d+/", maxSize: 30
}




}

This is the code I am using to search:

def empactUserList = EmpactUser.search(
            searchQuery,
            [reload: false, result: "every", defaultOperator: "or"])

Am I missing something?

Thanks, Alan.

Searchable has trouble recognising hasMany relations with Strings. A workaround is to create a new domain object which "belongs to" the parent object, and make a transient variable in the parent class. The following code works as an alternate to the example given in documentation .

class Article {
    static searchable = {
        root true
        keywords (component:true)
    }

    static transients = ['keywords']

    Set<ArticleKeyword> getKeywords() {
        ArticleKeyword.findAllByArticle(this) as Set
    }
}

class ArticleKeyword {
    static searchable = { root false}

    static constraints = {      
    }

    String text

    static belongsTo = [article:Article]
    static mapping = {
        text        type: 'text'
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM