Spring Data Elasticsearch:如何用CriteriaQuery组合AND与OR条件
正确构建MongoDB CriteriaQuery实现复杂逻辑条件
你当前的代码逻辑完全不符合预期需求,生成的查询语句是(d:4234234 AND (a:1 AND b:2)) OR (a:1 AND b:2),和你要的((a=1 AND b=2) OR (a=3 AND b=43)) AND d='4234234'结构偏差很大,这不仅会导致查询结果错误,还可能因为分片环境下的路由逻辑问题引发分片错误。
正确的实现方式是先将两个OR分支的条件独立封装,再用orOperator()组合,最后和D的条件通过andOperator()关联,严格匹配目标逻辑结构:
// 定义第一个OR分支:a=1 且 b=2 Criteria branch1 = new Criteria("a").is(1).and("b").is(2); // 定义第二个OR分支:a=3 且 b=43 Criteria branch2 = new Criteria("a").is(3).and("b").is(43); // 组合OR分支后,再与d的条件做AND关联 Criteria finalCriteria = new Criteria().andOperator( new Criteria().orOperator(branch1, branch2), new Criteria("d").is("4234234") );
也可以使用链式写法精简代码:
Criteria finalCriteria = new Criteria("d").is("4234234") .andOperator( new Criteria().orOperator( new Criteria("a").is(1).and("b").is(2), new Criteria("a").is(3).and("b").is(43) ) );
这种写法能确保查询逻辑完全符合你设定的条件,同时在分片集群中,分片键(如果d是分片键)会被正确识别,避免路由错误导致的分片异常。
内容的提问来源于stack exchange,提问作者Jackie Danes
相关产品推荐
相关产品推荐

