休眠搜索中的重叠日期结果

Overlap date result in hibernate search

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

  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();

它没有给出正确的结果。

我也想 return 重叠日期。例如: 开始日期=2020-04-07 和结束日期=2020-04-14

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

如何在Hibernate搜索中得到它?

您的查询有两个问题:

  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 OR subquery3)".
  2. 您没有表达间隔重叠的正确条件。正确的条件是:interval1StartDate <= interval2EndDate AND interval2StartDate <= interval1EndDate