pbhle
pbhle

Reputation: 2936

Join query in hibernate search

I want to write a lucene query like

" from activity where metaentityByEntity.id in(select metaentityByEntity.id from userentity where user.id=1)"

My domain classes are:

public class Activity implements java.io.Serializable {

    private Long id;
    private Date timeStamp;
    private User user;
    @IndexedEmbedded
    private Metaentity metaentityByEntity;
}

public class Userentitydetail implements java.io.Serializable {

    private Long id;
    private Date timeStamp;
    private Metaentity metaentityByEntity;
    @IndexedEmbedded
    private User user;
    private Metaentity metaentityByProjectId;
    private byte unfollow;
    private Byte isAssociated;
} 

But how to write lucene query which will search from multiple indexes? basically I am doing hibernate search.

Thanks.

Upvotes: 0

Views: 2124

Answers (1)

Sanne
Sanne

Reputation: 6107

Lucene is not a relational database, so the short answer is you shouldn't try doing joins; your specific use case happens to be implementable because your query can be greatly simplified.

Just create a query on the field which is following the link:

QueryBuilder queryBuilder = fullTextSession.getSearchFactory()
    .buildQueryBuilder()
    .forEntity( Activity.class )
    .get();

Query query = queryBuilder.keyword()
    .onField( "metaentityByEntity.user.id" )
    .ignoreAnalyzer()
    .matching( 1 )
    .createQuery();

You'll have to adjust some details as you omitted some mapping details; for example it might need to be

.matching( "1" )

instead.

Upvotes: 2

Related Questions