2 allow_no_indices 当没有可用的索引时,是否正常
3 expand_wildcards 统配的对象,是open的索引,还是closed的索引
这几个参数都可以在url参数中设置。
1.ES的client全局变量
private TransportClient client;
获取count总数
resp.getAggregations()
查询条件拼接:
- BoolQueryBuilder b = QueryBuilders.boolQuery();
- b.must(QueryBuilders.rangeQuery(ISSAConsts.LEVEL).lt(5))
must:分数评估查询字符串,filter:查询id,一般先filter过滤再must查询
- b.must(QueryBuilders.termQuery(ISSAConsts.DST_CITY, cityId));
- b.filter(QueryBuilders.rangeQuery(ISSAConsts.LEVEL).lt(5));
- 聚合查询,level分类
AggregationBuilder aggregation = AggregationBuilders
.terms(ISSAConsts.LEVEL).field(ISSAConsts.LEVEL)
.size(10)
.subAggregation(AggregationBuilders.count(ISSAConsts.TOTAL).field(ISSAConsts.TIMESTAMP));
- 结果统计
AggregationBuilder aggregation = AggregationBuilders
//group by level
//select level
.terms(ISSAConsts.LEVEL).field(ISSAConsts.LEVEL)
//limit 10
.size(10)
//统计total字段的数量,timestamp
.subAggregation(AggregationBuilders.count(ISSAConsts.TOTAL).field(ISSAConsts.TIMESTAMP));
SearchResponse resp = client.prepareSearch(ISSAConsts.EVENT_INDEX + sdf.format(dt))
.setTypes(ISSAConsts.EVENT)
.setIndicesOptions(IndicesOptions.fromOptions(true, true, false, false))
.setQuery(b)
.addAggregation(aggregation)
.setSize(0)
.execute()
.actionGet();
Q1:为什么不b.must b.should b.should ,
should类似or,must会不起作用,存疑。
if (resp.getAggregations() != null) {
Terms genders = resp.getAggregations().get(ISSAConsts.LEVEL);
if (genders != null) {
for (Terms.Bucket entry : genders.getBuckets()) {
int levelId = Integer.valueOf(entry.getKey().toString());
Map<String, Aggregation> m = entry.getAggregations().asMap();
double sum = ((ValueCount) m.get(ISSAConsts.TOTAL)).getValue();
total += sum;
map.put(levelId, Double.valueOf(sum).longValue());
}
}
}
跨平台路径兼容性:
private static final String ABSOLUTE_PATH = System.getProperty("user.dir") + File.separator
+ "resources" + File.separator;
简写:
eq相等 ne、neq不相等, gt大于,
lt小于 gte、ge大于等于 lte、le 小于等于
not非 mod求模
is [not] div by是否能被某数整除 is [not] even是否为偶数
is [not] even by $b即($a / $b) % 2 == 0 is [not] odd是否为奇
is not odd by $b即($a / $b) % 2 != 0