如 select distinct b.type_name from news a,news_type b where a.news_type_id= b.type_id and a.news_type_id = '1'
你这个查询用filter、must皆可,推荐filter
String index = "indexName" // 你的index名称String type = "my_table"
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
// boolQuery.must(QueryBuilders.termQuery("a", 1))
// boolQuery.must(QueryBuilders.termsQuery("b", 2, 3))
boolQuery.filter(QueryBuilders.termQuery("a", 1))
boolQuery.filter(QueryBuilders.termsQuery("b", 2, 3))
SearchResponse searchResponse = client.prepareSearch(index).setTypes(type)
.setQuery(boolQuery)
.addSort("c", SortOrder.ASC)
.addSort("d", SortOrder.ASC)
.storedFields("c", "d")
.get()
ES提供的聚合接口相当灵活和丰富,值得系统的学习一下。学习方式想了下,应该跟SQL结合起来,SQL相对来说比较直观,ES官网对Aggregation描述的展开也是从SQL开始的,所以通过设计不同的SQL 聚合查询场景,分别看下ES中用Aggregation API和Java API是怎么实现的。
测试数据源于 官网
测试数据是汽车的销售信息,这次实现的SQL是按颜色groupby,查询每种颜色的销售数目。
Aggregation API:
java API: