在hibernate搜索中加入查询

时间:2012-10-10 10:20:35

标签: lucene hibernate-search

我想写一个像

这样的lucene查询
" from activity where metaentityByEntity.id in(select metaentityByEntity.id from userentity where user.id=1)"

我的域名类是:

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;
} 

但是如何编写将从多个索引中搜索的lucene查询?基本上我在做hibernate搜索。

感谢。

1 个答案:

答案 0 :(得分:1)

Lucene不是关系数据库,所以简短的回答是你不应该尝试连接;您的特定用例恰好可以实现,因为您的查询可以大大简化。

只需在链接后面的字段上创建一个查询:

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

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

在省略一些映射细节时,您必须调整一些细节;例如,它可能需要

.matching( "1" )

代替。