gpt4 book ai didi

java - 如何在spring-data-elasticsearch中将 “or”运算符与CriteriaQuery一起使用

转载 作者:行者123 更新时间:2023-12-02 23:53:10 25 4
gpt4 key购买 nike

最近,我在项目中尝试使用spring-data-elasticsearch,遇到了很多问题。昨天我问了一个有关not操作的问题,但我自己解决了,现在在尝试使用or运算符时遇到了另一个问题。

这是我想要的:

我想用不是“11”的codesymbol是“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,这真令人沮丧。

最佳答案

我认为您需要将您的属性索引为“条款”,因为您将它们用作某些代码(术语)。如果将来需要,可以将现有索引保留为文本。因此,我找到了适合您的案例的本教程。

https://www.baeldung.com/spring-data-elasticsearch-queries



因此,如果您在字段上添加@InnerField并使用查询2,但在字段上使用 verbatim后缀,则它应该与列表中的查询编号2一起使用。您的字段将类似于 code.verbatim等。

您也可以考虑转到 NativeSearchQueryBuilder

关于java - 如何在spring-data-elasticsearch中将 “or”运算符与CriteriaQuery一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56164029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com