3

我需要在 Spring Data Solr 自定义存储库中实现以下内容:

(X 或 Y)和 Z

我目前的代码如下:

Criteria criteria = new Criteria("x").is(X_VALUE);
criteria = criteria.or(new Criteria("y").is(Y_VALUE);
criteria = criteria.and(new Criteria("z").is(Z_VALUE);

但是运行此代码我得到以下优先级:

X 或(Y 和 Z)

有任何想法吗?

4

1 回答 1

6

当前的 API 不允许这种标准组合。DATASOLR-105附带了一个补丁,虽然它不能完全解决问题,但它可以提供帮助。

现在使用SimpleStringCriteria可能会有所帮助。请注意,必须将值转换为 Solr 可读格式。

new SimpleQuery(new SimpleStringCriteria("(x or y) and z"));

更新

版本1.2将修复此问题,以便可以按如下方式创建查询。

Criteria orPart = Criteria.where("x").is("foo").or("y").is("bar");
Criteria andPart = Criteria.where("z").is("roo");
Query query = new SimpleQuery(orPart.and(andPart));
于 2014-01-30T12:43:59.420 回答