1

spring-data-elasticsearch Java api でフィルターを使用しようとしています。このような2つのフィールドに基づいて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 に答える