es查询Java(类in查询)
存在问题的写法if (shouldPara != null && shouldPara.size() > 0) {List<String> jwhdzbm = (List<String>) shouldPara.get("JWHDZBM");List<String> dzbm = (List<String>) shouldPar
·
存在问题的写法
if (shouldPara != null && shouldPara.size() > 0) { List<String> jwhdzbm = (List<String>) shouldPara.get("JWHDZBM"); List<String> dzbm = (List<String>) shouldPara.get("DZBM"); if (jwhdzbm != null && jwhdzbm.size() > 0) { jwhdzbm.forEach(s -> { boolQueryBuilder.should(QueryBuilders.termQuery("JWHDZBM", s)); }); } if (dzbm != null &&dzbm.size() > 0) { dzbm.forEach(s -> { boolQueryBuilder.should(QueryBuilders.termQuery("DZBM", s)); }); } }
正确的写法
if (shouldPara != null && shouldPara.size() > 0) { List<String> jwhdzbm = (List<String>) shouldPara.get("JWHDZBM"); List<String> dzbm = (List<String>) shouldPara.get("DZBM"); if (jwhdzbm != null && jwhdzbm.size() > 0) { boolQueryBuilder.must(QueryBuilders.termsQuery("JWHDZBM", jwhdzbm)); } if (dzbm != null && dzbm.size() > 0) { boolQueryBuilder.must(QueryBuilders.termsQuery("DZBM", dzbm)); } }
写法对比以及错误写法
boolQueryBuilder.should(QueryBuilders.termQuery("JWHDZBM", s));
第一、使用should写法
会返回满足这一个条件的数据,存在组合查询结果错误
第二、使用termQuery写法
会存在参数超过1024的限制(查询id超出1024的限制),导致查询失败。
解决方法:
一、修改es查询设置
elasticsearch.yml配置文件修改为 index.query.bool.max_clause_count: 10240
二、使用terms写法
boolQueryBuilder.must(QueryBuilders.termsQuery("DZBM", dzbm));
更多推荐
所有评论(0)