В последнее время я пытаюсь использовать spring-data-elasticsearch
в своем проекте и столкнулся с множеством проблем. Я вчера задал вопрос о not
операции, но решил сам. И теперь я столкнулся с другой проблемой при попытке использовать or
оператор.
Вот что я хочу:
Я хочу запросить объект с code
, который не равен "11" и его symbol
равен "22" или subSymbol
равен "33". Я пытался много раз во многих отношениях, но потерпел неудачу. Кажется, я не могу заставить его работать с CriteriaQuery. Я не знаю, четко ли я описал свой вопрос. А в SQL он должен быть написан так:
select from x where x.code!='11' and (x.symbol='22' or x.subSymbol='33')
Но с CriteriaQuery я всегда получаю результаты, если значение symbol/subSymbol
соответствует и условие code
отсутствует, его SQL работает следующим образом:
select from x where x.code!='11' or x.symbol='22' or x.subSymbol='33'
Вот что я пытаюсь:
1.
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()
.and("code").is("11").not()
.or("symbol").is("22").or("subSymbol").is("33"));
2.
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()
.and("code").is("11").not()
.or(new Criteria("symbol").is("22").and("subSymbol").is("33")));
3.
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()
.and("code").is("11").not()
.and(new Criteria("symbol").is("22").or("subSymbol").is("33")));
4.
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()
.and("code").is("11").not())
.addCriteria(new Criteria("symbol").is("22").or("subSymbol").is("33"));
List<xx> sampleEntities =
elasticsearchTemplate.queryForList(criteriaQuery,xx.class);
Все вышеперечисленное не удалось.
Так есть какое-нибудь решение для решения моей проблемы? Или мне нужно попробовать NativeSearchQueryBuilder. Это так расстраивает.