自定义存储库的 Spring Data Solr 优先级

Posted

技术标签:

【中文标题】自定义存储库的 Spring Data Solr 优先级【英文标题】:Spring Data Solr Precedence for Custom Repository 【发布时间】:2014-01-29 12:30:51 【问题描述】:

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

(X OR Y) AND 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)

有什么想法吗?

【问题讨论】:

【参考方案1】:

当前 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));

【讨论】:

谢谢。我确实最终构建了字符串 Query,然后使用 SimpleStringCriteria 从中创建条件。希望补丁能在后期解决。 但即使您使用 SimpleQuery 的提示也会导致:x:foo OR y:bar AND z:roo,我使用的是 spring data solr v. 1.3.0.RELEASE 嗯......你说得对,似乎仍然存在问题。它适用于产生z:roo AND (x:foo OR y:bar)andPart.and(orPart)。将检查并在解决后通知您。 这个问题将在 1.4 中得到修复,增强了使用 connect() 连接 Criteria 的概念,以便 (x OR y) AND z 可以创建为 where("x").is("foo").or("y").is("bar").connect().and(where("z").is("roo")) 谢谢。 new SimpleStringCriteria("(x or y) and z") 解决了我们的问题。

以上是关于自定义存储库的 Spring Data Solr 优先级的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring-Data-Solr 注入存储库

Spring Data Solr 多核和存储库

Spring认证中国教育管理中心-Apache Solr 的 Spring 数据教程一

Spring Data Rest Save 可迭代实体

Apache Solr 的 Spring Data (数据)

spring-data 存储库自定义查询