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测试