Hibernate Search anfragende?
-
21-09-2019 - |
Frage
Grüße
Meine Domain-Modell wird folgendermaßen als
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;
}
ich verwenden möchte 'Hibernate Search' Abfragen auszuführen wie
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();
Ich frage mich, da alle drei Klassen haben gleiches Feld ‚Namen‘ ist es gegen alle Klassen gesucht?
Ist das ‚Ergebnis‘ Objekte aller Typen hat?
Lösung
Es hängt auch davon ab, wie Sie Index. Wenn Sie Index jeweils separat Klasse (jede Klasse Bedeutung hat eine @Indexed Anmerkung) und nicht angeben, eine erwartete Typklasse bei der Erstellung des FullTextQuery Du im Ergebnis tatsächlich gemischte Klassen erhalten.
in Ihrem Beispiel jedoch sollten Sie überlegen, auf dem Attribut @IndexedEmbedded Familien und Mitglieder . In diesem Fall wird die Feldnamen in der Lucene Document s wird families.name und families.members.name .
Haben Sie einen Blick auf die Hibernate Search Online-Dokumentation und die eingebettete Indexierungsfunktion.
- Hardy
Andere Tipps
Logisch, ja, denn nirgendwo in der Abfrage haben angegeben Sie die Art der Objekte, die Sie wollen.
Wenn Sie die Ergebnisse auf bestimmte Typen beschränken möchten, müssen Sie diese Typen als Vararg Liste weitergeben müssen:
fullTextSession.createFullTextQuery( luceneQuery, A.class, B.class );
Dies wird beschrieben in der docs .