【发布时间】:2018-03-26 21:58:01
【问题描述】:
我有一个类似下面的代码,我在布尔查询中执行多个必须。在这里,我在“地址”字段中传递了必须的术语查询。现在 ip 地址将作为来自其他 api 的列表出现在我面前,我必须将列表中的所有 ip 作为必须项查询传递给我。在这里,我没有找到在创建 QueryBuilder 时如何动态传递地址值的方法。
请建议如何做到这一点。
public static SearchResponse searchResultWithAggregation(String es_index,
String es_type, List<String> ipList, 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;
}
【问题讨论】:
标签: java elasticsearch