基于Hibernate apache lucene的全文搜索,带有一个静态过滤器
我的目标是只搜索活动项目 以下是我的代码片段:基于Hibernate apache lucene的全文搜索,带有一个静态过滤器,hibernate,lucene,full-text-search,hibernate-search,Hibernate,Lucene,Full Text Search,Hibernate Search,我的目标是只搜索活动项目 以下是我的代码片段: FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(this.getEntityManager()); QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory() .buildQueryBuilder(
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);
状态对象是枚举
在这种情况下,如果upper找不到任何结果,结果是所有活动项,则会发生这种情况,因为它是布尔查询
有什么建议吗?如果我理解正确,您需要类似以下内容的查询:
+(token1* token2* token3*) +field4:active
要构建该查询,您不想将field4:active部分添加到与令牌集相同的布尔查询中,您需要创建一个父布尔查询以将令牌集添加为必需(必须)查询。比如:
BooleanJunction<BooleanJunction> parentJunction = queryBuilder.bool();
parentJunction.must(booleanJunction.createQuery());
parentJunction.must(field4activeQuery);
BooleanJunction parentJunction=queryBuilder.bool();
parentJunction.must(booleanJunction.createQuery());
parentJunction.must(field4activeQuery);
BooleanJunction<BooleanJunction> parentJunction = queryBuilder.bool();
parentJunction.must(booleanJunction.createQuery());
parentJunction.must(field4activeQuery);