Hibernate Поиск запросов? - PullRequest
0 голосов
/ 25 декабря 2009

Привет

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

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;

}

Я хочу использовать «Поиск в спящем режиме» для выполнения запросов типа

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 ]

2 голосов
/ 26 декабря 2009

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

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

Ознакомьтесь с онлайн-документацией по Hibernate Search и встроенной функцией индексации.

- Hardy

2 голосов
/ 25 декабря 2009

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

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

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

Это описано в документации .

...