2017-10-08 10 views
0

私はQueryBuilderを使用しようとしていますが、フィールドに問題があるとは限りません。Elasticsearch QueryBuilderには常にすべてのフィールドがありません

.setQuery(QueryBuilders.boolQuery() 
        .must(termQuery("country", countryName)) 
        .must(termQuery("Region", regionName)) 
        .must(termQuery("City", city)) 
        .must(rangeQuery("persons").from(persons)) 
        .get(); 

上記の例では都市が必ずしも必要ではない場合がありますが、空のままにしておくと空の都市が検索されます。これは都市のためのものですが、後で10個以上のフィールドが必要です。 条件付きでビルダーに物を追加したり、別のスマートな方法がありますか?

答えて

0

queryを構築して、検索要求に渡すことができます。ビルド中に、クエリに条件付きで文を追加することができます。これはこのようになります

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() 
     .must(termQuery("country", countryName)) 
     .must(termQuery("Region", regionName)) 
     .must(rangeQuery("persons").from(persons)); 

if(city != null && city.trim().equals("")) { 
    queryBuilder.must(termQuery("City", city)); 
} 

.setQuery(queryBuilder); //add query to your search request 
+0

ありがとうございます!私はこれを試したと思ったが、デバッグの嵐の中にあったので、間違っていたかもしれない。 – Maarten

関連する問題