使用一个静态过滤器的基于 Hibernate apache lucene 的全文搜索
Hibernate apache lucene based full text search with one static filter
我的目标是仅在活动项目中搜索
这是我的代码片段:
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 查询..
有什么建议吗?
如果我没理解错的话,你想要这样的查询:
+(token1* token2* token3*) +field4:active
要构建它,您不想将 field4:active 部分添加到与令牌集相同的布尔查询中,您需要创建一个父布尔查询来添加令牌集作为必需(必须)查询的查询。类似于:
BooleanJunction<BooleanJunction> parentJunction = queryBuilder.bool();
parentJunction.must(booleanJunction.createQuery());
parentJunction.must(field4activeQuery);
我的目标是仅在活动项目中搜索 这是我的代码片段:
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 查询..
有什么建议吗?
如果我没理解错的话,你想要这样的查询:
+(token1* token2* token3*) +field4:active
要构建它,您不想将 field4:active 部分添加到与令牌集相同的布尔查询中,您需要创建一个父布尔查询来添加令牌集作为必需(必须)查询的查询。类似于:
BooleanJunction<BooleanJunction> parentJunction = queryBuilder.bool();
parentJunction.must(booleanJunction.createQuery());
parentJunction.must(field4activeQuery);