Reputation: 2936
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
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