Pergunta

Saudações

Meu modelo de domínio é o seguinte

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;

}

Eu quero usar 'pesquisa de hibernação' para executar consultas como

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

Estou me perguntando, já que as três classes têm o mesmo campo 'nome', ele pesquisa novamente todas as classes?

O 'resultado' tem objetos de todos os tipos?

Foi útil?

Solução

Também depende de como você indexa. Se você indexar cada classe separadamente (o que significa que cada classe possui uma anotação @Indexed) e não especificar um tipo de classe esperado ao criar o FullTextQuery, você obtém classes mistas no resultado.

No entanto, no seu exemplo, você pode considerar usar @IndexedEmbedded no atributo famílias e membros. Nesse caso, os nomes de campo no Lucene Documentolavagem família.name e família.members.name.

Dê uma olhada na documentação on -line de pesquisa de hibernato e no recurso de indexação incorporada.

-Hardy

Outras dicas

Logicamente, sim, porque em nenhum lugar da consulta você especificou o tipo de objetos que deseja.

Se você deseja restringir os resultados a tipos específicos, precisa passar esses tipos como uma lista de vararg:

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

Isso é descrito nos documentos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top