休眠搜索中的重叠日期结果
Overlap date result in hibernate search
我在数据库中有两列日期:
- START_DATE
- 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搜索中得到它?
您的查询有两个问题:
- 您正在大量使用
must
和 should
。它们不是同一件事。
基本上:
- 如果您想要 "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)".
- 您没有表达间隔重叠的正确条件。正确的条件是:
interval1StartDate <= interval2EndDate AND interval2StartDate <= interval1EndDate
我在数据库中有两列日期:
- START_DATE
- 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搜索中得到它?
您的查询有两个问题:
- 您正在大量使用
must
和should
。它们不是同一件事。 基本上:- 如果您想要 "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)".
- 如果您想要 "OR",请创建一个仅包含 "should" 子句的布尔查询。例如。
- 您没有表达间隔重叠的正确条件。正确的条件是:
interval1StartDate <= interval2EndDate AND interval2StartDate <= interval1EndDate