使用一个静态过滤器的基于 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);