我有一个像下面的代码,我在bool查询中必须做多个.在这里,我在字段"地址"中传递必须的术语查询.现在ip地址将作为来自其他api的列表来找我,我必须传递列表中的所有ip作为必须条款查询.在这里,我没有办法在创建QueryBuilder时动态传递地址值.
请建议如何做到这一点.
public static SearchResponse searchResultWithAggregation(String es_index, String es_type, ListipList, String queryRangeTime) { Client client = ESClientFactory.getInstance(); QueryBuilder qb = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("address", "10.203.238.138")) .must(QueryBuilders.termQuery("address", "10.203.238.137")) .must(QueryBuilders.termQuery("address", "10.203.238.136")) .mustNot(QueryBuilders.termQuery("address", "10.203.238.140")) .should(QueryBuilders.termQuery("client", "")); queryRangeTime = "now-" + queryRangeTime + "m"; FilterBuilder fb = FilterBuilders.rangeFilter("@timestamp") .from(queryRangeTime).to("now"); SearchResponse response = client .prepareSearch(es_index) .setTypes(es_type) .setQuery(qb) .setPostFilter(fb) .addAggregation( AggregationBuilders.avg("cpu_average").field("value")) .setSize(10).execute().actionGet(); System.out.println(response.toString()); return response; }
BlackPOP.. 10
您可以使用术语查询为单个字段传递多个值.创建一个字符串数组或集.并将其传递给术语查询.
Setaddress = new HashSet (); address.add("10.203.238.138"); address.add("10.203.238.137"); address.add("10.203.238.136"); if(address!=null) QueryBuilder qb = QueryBuilders.boolQuery() .must(QueryBuilders.termsQuery("address",address)) .mustNot(QueryBuilders.termQuery("address", "10.203.238.140")) .should(QueryBuilders.termQuery("client", "")); else QueryBuilder qb = QueryBuilders.boolQuery() .mustNot(QueryBuilders.termQuery("address", "10.203.238.140")) .should(QueryBuilders.termQuery("client", ""));
希望能帮助到你..!
您可以使用术语查询为单个字段传递多个值.创建一个字符串数组或集.并将其传递给术语查询.
Set<String> address = new HashSet<String>(); address.add("10.203.238.138"); address.add("10.203.238.137"); address.add("10.203.238.136"); if(address!=null) QueryBuilder qb = QueryBuilders.boolQuery() .must(QueryBuilders.termsQuery("address",address)) .mustNot(QueryBuilders.termQuery("address", "10.203.238.140")) .should(QueryBuilders.termQuery("client", "")); else QueryBuilder qb = QueryBuilders.boolQuery() .mustNot(QueryBuilders.termQuery("address", "10.203.238.140")) .should(QueryBuilders.termQuery("client", ""));
希望能帮助到你..!