重叠日期导致休眠搜索

问题描述 投票:0回答:1

我在数据库中有两列用于日期:

  1. START_DATE
  2. END_DATE

我正在使用范围查询来给出结果。我的查询:

Query startDateQuery = queryBuilder.range().onField("eventsSet.startDate").above(java.sql.Date.valueOf(startDate)) 
                .createQuery();
Query endDateQuery = queryBuilder.range().onField("eventsSet.endDate").below(java.sql.Date.valueOf()) 
                .createQuery();
queryBuilder.bool().must(startDateQuery).should(endDateQuery).createQuery();

没有给出正确的结果。

我也想返回重叠日期。例如:startDate = 2020-04-07和endDate = 2020-04-14

它应该返回具有范围以及重叠日期的记录,例如具有startDate = 2020-04-01和endDate = 2020-04-15的记录。

如何在Hibernate搜索中获取它?

hibernate-search
1个回答
0
投票

您的查询中有两个问题:

  1. 您正在自由使用mustshould。它们不是同一件事。基本上:
    • 如果要“ OR”,则仅使用“ should”子句创建布尔查询。例如。 queryBuilder.bool().should(subquery1).should(subquery2).createQuery();表示“ subquery1 OR subquery2”。
    • 如果要“ AND”,则仅使用“ must”子句创建一个布尔查询。例如。 queryBuilder.bool().must(subquery1).must(subquery2).createQuery();表示“ subquery1 AND subquery2”。
    • 如果要同时使用“ AND”和“ OR”,请确保创建一个单独的布尔查询。例如。 queryBuilder.bool().must(subquery1).must(queryBuilder.bool().should(subquery2).should(subquery3).createQuery()).createQuery();表示“ subquery1 AND(subquery2或subquery3)”。
  2. 您没有为间隔重叠表示正确的条件。正确的条件是:interval1StartDate <= interval2EndDate AND interval2StartDate <= interval1EndDate
© www.soinside.com 2019 - 2024. All rights reserved.