2010-10-14 19 views
3

J'utilise le plugin Searchable dans mon application Grails, mais j'ai du mal à le faire correspondre à plus de 2 objets de domaine tout en renvoyant des résultats de recherche valides. J'ai regardé la documentation du plugin Searchable, mais je ne trouve pas la réponse à ma question. Voici un exemple très basique des domaines que j'ai:Comment mapper le plugin Grails Searchable sur plus de 2 objets de domaine?

class Article { 

    static hasMany = [tags: ArticleTag] 

    String title 
    String body 
} 

class ArticleTag { 
    Article article 
    Tag tag 
} 

class Tag { 
    String name 
} 

En fin de compte ce que je cherche à faire est d'être en mesure de trouver des articles en recherchant leurs titres, le corps et les étiquettes associées. Les titres et les tags seraient également améliorés.

Quelle est la bonne façon de mapper ces classes pour atteindre les résultats souhaités?

Répondre

3

Il y a probablement une autre approche, mais c'est l'approche simple que j'ai utilisée dans mon application. J'ai ajouté une méthode à l'objet de domaine pour obtenir toutes les valeurs de chaîne à partir des balises et les ajouter à l'index avec l'objet article.

Cela me permet de rechercher simplement l'objet de l'article de domaine et obtenir tout ce que je besoin

class Article { 

    static searchable = { 
     // don't add id and version to index 
     except = ['id', 'version'] 

     title boost: 2.0 
     tag boost:2.0 

     // make the name in the index be tag 
     tagValues name: 'tag' 
    } 

    static hasMany = [tags: ArticleTag] 


    String title 
    String body 

    // do not store tagValues in database 
    static transients = ['tagValues'] 

    // create a string value holding all of the tags 
    // this will store them with the Article object in the index 
    String getTagValues() { 
     tags.collect {it.tag}.join(", ") 
    } 
} 
+0

Ce ne fut pas exactement ce que je cherchais, mais il fonctionne. J'utilise votre solution jusqu'à ce que je trouve un meilleur moyen. Merci pour l'aide Aaron. – aasukisuki