重叠日期导致休眠搜索

时间:2020-04-23 10:33:59

标签: 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();

它没有给出正确的结果。

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

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

如何在Hibernate搜索中获取它?

1 个答案:

答案 0 :(得分:1)

查询中有两个问题:

  1. 您正在自由使用mustshould。它们不是同一件事。 基本上:
    • 如果要“或”,则仅使用“应”子句创建一个布尔查询。例如。 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