exists允许你过滤文档,只查找那些在特定字段有值的文档,无论其值是多少。demo如下:
1、索引中的数据如下:
2、查询语句如下
GET account/account/_search
{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "sex"
}
}
]
}
}
}
如下可以看到,sex字段为null的文档也没有查询出来
3、java代码实现该查询
/** * exists过滤器 */ @ResponseBody @RequestMapping("/searchAccountBool") public List<Account> searchAccountBool(){ BoolQueryBuilder accountBoolquery = QueryBuilders.boolQuery(); ExistsQueryBuilder sexQueryBuilder = QueryBuilders.existsQuery("sex"); accountBoolquery.must(sexQueryBuilder); System.out.println(accountBoolquery); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(accountBoolquery).build(); List<Account> accountList = elasticsearchTemplate.queryForList(searchQuery, Account.class); System.out.println(accountList); return accountList; }
4、postman测试