0

我想写一个像这样的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 查询呢?基本上我在做休眠搜索。

谢谢。

4

1 回答 1

2

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

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

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

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

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

.matching( "1" )

反而。

于 2012-10-10T22:57:35.520 回答