Hibernate Lucene为枚举添加OR运算符

Hibernate Lucene为枚举添加OR运算符,hibernate,lucene,hibernate-search,Hibernate,Lucene,Hibernate Search,Hibernate Lucene为枚举添加OR运算符 我实现了这段代码,并且运行良好 QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(MyClass.class).get(); Query query1 = queryBuilder.keyword().onFields("title", "description").matching(keywords).c

Hibernate Lucene为枚举添加OR运算符

我实现了这段代码,并且运行良好

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

Query query1 = queryBuilder.keyword().onFields("title", "description").matching(keywords).createQuery();

Query query2 = queryBuilder.keyword().onFields(STATE.ENABLED).createQuery();

List<Query> listOfQuery = new ArrayList<Query>();

listOfQuery.add(query1);
listOfQuery.add(query2);

Query finalLuceneQuery=new BooleanQuery();
for (Query query : listOfQuery) {
    ((BooleanQuery) finalLuceneQuery).add(query, BooleanClause.Occur.MUST);
}

FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(finalLuceneQuery, MyClass.class);

但是不起作用

您可以创建一个布尔查询

Query query2 = queryBuilder.keyword().onFields(STATE.ENABLED).createQuery();
Query query3 = queryBuilder.keyword().onFields(STATE.DISABLED).createQuery();

BooleanQuery bq = new BooleanQuery();
bq.add(new BooleanClause(query2 , BooleanClause.Occur.SHOULD));
bq.add(new BooleanClause(query3 , BooleanClause.Occur.SHOULD));
然后您可以在列表中添加bq

listOfQuery.add(query1);
listOfQuery.add(bq);
listOfQuery.add(query1);
listOfQuery.add(bq);