1

我正在尝试在 spring-data-elasticsearch java api 中使用过滤器。我知道我可以使用 andFilter 基于这样的两个字段进行搜索

builder.withFilter(FilterBuilders.andFilter(FilterBuilders.rangeFilter("DATE").gte(startDate).lt(endDate), FilterBuilders.boolFilter().mustNot(FilterBuilders.termFilter("STATUS", "ACTIVE"))));

但是在代码中我有一些 if 条件,因此我不能直接使用 andFilter 来搜索......看看这个例子

    if("MSGSTAT".equals("SENT")) {
            builder.withFilter(FilterBuilders.rangeFilter("DATE").gte(startDate).lt(endDate));
        }
    if("STATUS".equals("ACTIVE")) {
    builder.withFilter(FilterBuilders.boolFilter().mustNot(FilterBuilders.termFilter("STATUS", "ACTIVE")));
}

当我以上述方式使用过滤器时,它不应用 and 关键字并且收到的结果不正确。我也尝试过这样做,但也无济于事

builder.withFilter(FilterBuilders.andFilter(FilterBuilders.rangeFilter("DATE").gte(startDate).lt(endDate))); 

builder.withFilter(FilterBuilders.andFilter(FilterBuilders.boolFilter().mustNot(FilterBuilders.termFilter("STATUS", "ACTIVE"))));

我应该如何确保在使用 if 条件时始终应用 AND 聚合

4

1 回答 1

1

得到了答案...我创建了一个 AndFilterBuilder 类型的引用变量,并使用 add() 将所有过滤器添加到它,然后构建了查询生成器

NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
AndFilterBuilder filters = null;
filters = new AndFilterBuilder(<your filter>);
filters.add(<your filter>);
builder.withFilter(filters);
builder.build()
于 2015-02-12T12:58:41.773 回答