自定义存储库的 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认证中国教育管理中心-Apache Solr 的 Spring 数据教程一