一: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);