2017-01-12 11 views
0
QueryBuilder missingFiletr = QueryHelper.andQuery(incCatsEmptyFilter, excCatsEmptyFilter, incEmptyFilter, excEmptyFilter); 

私はandQueryメソッドを呼び出していますし、andFilterBuilders() のすべてのパラメータiがにしたいと、今私はfilterBuilderにこれを抽出していますfilterBuilders配列NADしようとしていますおよびすべてのクエリビルダ。それが正しい形式QueryBuilders配列弾性検索2.4

public static QueryBuilder andQuery(QueryBuilder... filterBuilders) { 
QueryBuilder filterBuilder = null; 

if (filterBuilders != null && filterBuilders.length > 0) { 

    for(int i = 0 ; i < filterBuilders.length ; i++){ 
    filterBuilder = QueryBuilders.boolQuery().filter(filterBuilders[i]); 
    } 

} 
return filterBuilder; 

}

答えて

1

いいえ、あなたは、各反復で新しいbool/filterクエリを作成し、同じ変数に再割り当てされ、機能しませんです。代わりに、このようにそれを実行する必要があります。

public static QueryBuilder andQuery(QueryBuilder... filterBuilders) { 
    BoolQueryBuilder filterBuilder = null; 

    if (filterBuilders != null && filterBuilders.length > 0) { 
    // create the bool query here 
    filterBuilder = QueryBuilders.boolQuery();  

    for(QueryBuilder filter : filterBuilders){ 
     // add each filter to the bool query here 
     filterBuilder.filter(filter); 
    } 

    } 
    return filterBuilder; 
} 
+0

今では、(i = 0をint型;私はfilterBuilders.lengthを<;私は++)のために、エラーを示す{ //ここでブールクエリ filterBuilder.filterに各フィルタを追加します(filterBuilders [i]); } filterBuilderの後に.filter()でエラーが発生しました。フィルタメソッドが表示されません –

+0

filterBuilder = QueryBuilders.andQuery(filterBuilders);私はこの行を置き換えるだけです –

+0

私は私の答えを更新しました。 – Val