【问题标题】:Spring Data Solr Precedence for Custom Repository自定义存储库的 Spring Data Solr 优先级
【发布时间】: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)

有什么想法吗?

【问题讨论】:

    标签: java spring solr spring-data spring-data-solr


    【解决方案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") 解决了我们的问题。
    猜你喜欢
    • 2018-10-06
    • 2017-09-19
    • 2013-05-21
    • 2016-08-29
    • 2017-06-18
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多