一:es精确查询、模糊查询:
es精确查询使用WildcardQueryBuilder:精确查询和模糊查询的区别是被模糊的字段值是否加匹配符 *、?,*匹配任意多个,?只匹配一个;
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//条件
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
WildcardQueryBuilder wildQueryBuilder = null;
WildcardQueryBuilder wildQueryBuilder2 = null; if (!StringUtils.isEmpty(param.getKeyword())) {
wildQueryBuilder = QueryBuilders.wildcardQuery(
"opt_user", "*"+param.getKeyword()+"*");
}
if (!StringUtils.isEmpty(param.getTargetModule())) {
wildQueryBuilder2 = QueryBuilders.wildcardQuery(
"target_module", "*"+param.getTargetModule()+"*");
}
if(wildQueryBuilder!=null){
boolQueryBuilder.must(wildQueryBuilder);
}
if(wildQueryBuilder2!=null){
boolQueryBuilder.must(wildQueryBuilder2);
}
sourceBuilder.query(boolQueryBuilder);二:es分词查询:
es分词查询使用BoolQueryBuilder:
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();if (!StringUtils.isEmpty(param.getAppId())) {
boolQueryBuilder.filter(QueryBuilders.termQuery("app_id", param.getAppId()));
}
if (!StringUtils.isEmpty(param.getOperationType())) {
boolQueryBuilder.filter(QueryBuilders.termQuery("opt_type", param.getOperationType().getValue()));
}sourceBuilder.query(boolQueryBuilder);遇到的坑:wildcardQuery的模糊查询,在es中属性类型type=text时仍然是分词的形式查询,只有在type=keyword时,wildcardQuery实现类似于mysql中like模糊查询的方法才会生效。
版权声明:本文为xumengdi_xmd原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。