最近,我正在尝试在项目中使用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。这真令人沮丧。
答案 0 :(得分:0)
我认为您需要将您的属性编入术语,因为您将它们用作某些代码(术语)。如果将来需要,可以将现有索引保留为文本。因此,我找到了适合您的案例的本教程。
因此,如果您在字段上添加@InnerField并使用查询2,但在字段上使用verbatim
后缀,则它应该与列表中的查询编号2一起使用。您的字段将类似于code.verbatim
,等等...
您还可以考虑移至NativeSearchQueryBuilder
。