2009-12-25 12 views
0

SalutationsHibernate Recherche d'interrogation?

Mon modèle de domaine est le suivant

class Species { 
private String name; 
.. 
.. 
List<Family> families; 
} 

class Family{ 
private String name; 
private String locusId; 
.. 
List<Member> members; 
} 

class Members{ 
private String name; 
private String repTranscript; 

} 

Je veux utiliser Hibernate Search 'pour exécuter des requêtes comme

org.hibernate.lucene.search.Query luceneQuery = parser.parse("name:ASpeciesName or name:AGroupName or locudID:someLocusID"); 
    org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery); 
List result = fullTextQuery.list(); 

Je me demande, puisque les trois classes a même domaine 'nom' recherche-t-il toutes les classes?

Le 'résultat' contient-il des objets de tous les types?

Répondre

2

Cela dépend aussi de la façon dont vous indexez. Si vous indexez chaque classe séparément (ce qui signifie que chaque classe a une annotation @Indexed) et que vous ne spécifiez pas de type de classe attendu lors de la création de FullTextQuery, vous obtenez en effet des classes mixtes dans le résultat.

Cependant, dans votre exemple, vous pouvez envisager d'utiliser @IndexedEmbedded sur l'attribut familles et membres. Dans ce cas, les noms des champs dans le Lucene Document s familles.nom et families.members.name. Consultez la documentation en ligne de Hibernate Search et la fonction d'indexation intégrée pour consulter la documentation de Hibernate Search.

--Hardy

2

Logiquement, oui, car vous n'avez pas spécifié le type d'objet souhaité dans la requête.

Si vous voulez limiter les résultats à des types spécifiques, vous devez passer ces types comme une liste vararg:

fullTextSession.createFullTextQuery(luceneQuery, A.class, B.class); 

Ceci est décrit in the docs.