2009-12-25 8 views
0

ПриветHibernate Search query?

Моя модель предметной области выглядит следующим образом

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; 

} 

Я хочу использовать «Hibernate Search» для выполнения запросов, как

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(); 

Я интересно, так как все три класса имеет такое же поле 'name' выполняет поиск по всем классам?

Имеет ли «результат» объекты всех типов?

ответ

2

Это также зависит от того, как вы индексируете. Если вы индексируете каждый класс отдельно (что означает, что каждый класс имеет аннотацию @Indexed), и при создании FullTextQuery вы не укажете ожидаемый тип класса, вы получите действительно смешанные классы в результате.

Однако, в вашем примере вы могли бы рассмотреть возможность использования @IndexedEmbedded на атрибут семьи и членов. В этом случае имена полей в Lucene Документ s будет family.name и фамилия.members.name.

Посмотрите документацию по Hibernate Search и встроенную функцию индексирования.

--Hardy

2

Логически, да, потому что нигде в запросе не указан тип объектов, которые вы хотите.

Если вы хотите ограничить результаты для конкретных типов, вам необходимо передать эти типы как список vararg:

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

Это описано in the docs.