spring-data-elasticsearch,Java,Spring,spring Data Elasticsearch" /> spring-data-elasticsearch,Java,Spring,spring Data Elasticsearch" />

在spring data elasticsearch java api中使用两个过滤器进行搜索

在spring data elasticsearch java api中使用两个过滤器进行搜索,java,spring,spring-data-elasticsearch,Java,Spring,spring Data Elasticsearch,我试图在SpringDataElasticSearchJavaAPI中使用过滤器。我知道我可以使用andFilter根据两个类似的字段进行搜索 builder.withFilter(FilterBuilders.andFilter(FilterBuilders.rangeFilter("DATE").gte(startDate).lt(endDate), FilterBuilders.boolFilter().mustNot(FilterBuilders.termFilter("STATUS",

我试图在SpringDataElasticSearchJavaAPI中使用过滤器。我知道我可以使用andFilter根据两个类似的字段进行搜索

builder.withFilter(FilterBuilders.andFilter(FilterBuilders.rangeFilter("DATE").gte(startDate).lt(endDate), FilterBuilders.boolFilter().mustNot(FilterBuilders.termFilter("STATUS", "ACTIVE"))));
但是在代码中我有一些if条件,因此我不能直接使用and过滤器来搜索。。。看看这个例子

    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聚合

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

NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
AndFilterBuilder filters = null;
filters = new AndFilterBuilder(<your filter>);
filters.add(<your filter>);
builder.withFilter(filters);
builder.build()
NativeSearchQueryBuilder=new NativeSearchQueryBuilder();
AndFilterBuilder过滤器=null;
filters=new和filterBuilder();
filters.add();
带过滤器的建筑商(过滤器);
builder.build()

在第二个代码部分,没有明显的“and”关键字。如果使用json构建过滤器,它会是什么样子?我也尝试过这种方式,只是为了检查它会做什么。由于在json格式中,所有搜索条件都将在单个和部分提及,我想我必须将所有条件与java API中的one和Filter()放在一起,也许您可以编写自定义存储库的实现,并在过滤器中使用@Query注释。NativeSearchQueryBuilder无法解析为typeHi Renu,您正在使用哪个jar?弹性搜索1.4 jar当前示例提到弹性搜索api的spring实现的使用。