我的目标是仅在活动项目中搜索 这是我的代码片段:
FullTextEntityManager fullTextEntityManager =
Search.getFullTextEntityManager(this.getEntityManager());
QueryBuilder queryBuilder =
fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(Myclass.class)
.get();
BooleanJunction<BooleanJunction> booleanJunction = queryBuilder.bool();
for(String token : tokens){
booleanJunction.should( queryBuilder.keyword()
.wildcard()
.onFields("field1", "field2", "field3")
.matching(token + "*")
.createQuery());
}
FullTextQuery jpaQuery = fullTextEntityManager.createFullTextQuery(booleanJunction.createQuery(), MyClass.class);
我想用field4过滤,它是Object,Enum, 我试过这个:
booleanJunction.must( queryBuilder.keyword()
.wildcard()
.onField("field4")
.matching(Status.ACTIVE)
.createQuery());
状态对象是枚举。
在这种情况下,如果上层不应该找到任何结果是所有活动项,则会发生因为它是bool查询..
任何建议?
答案 0 :(得分:1)
如果我理解正确,您需要一个类似的查询:
+(token1* token2* token3*) +field4:active
要构建它,您不希望将field4:active部分添加到与标记集相同的布尔查询中,您将需要创建父布尔查询以将标记查询集添加为必需(必须)查询。类似的东西:
BooleanJunction<BooleanJunction> parentJunction = queryBuilder.bool();
parentJunction.must(booleanJunction.createQuery());
parentJunction.must(field4activeQuery);