ElasticSearch (2.2) Java 在开始日期和结束日期之间过滤(如果存在)
ElasticSearch (2.2) Java filter between startDate and endDate if exists
我想使用 elasticsearch(java 客户端)使用以下过滤器:
如果开始日期存在且低于现在
如果 endDate 存在并且大于现在
我已经有以下但它没有显示没有开始日期或结束日期的一次:
//Start date end date
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.filter(QueryBuilders.rangeQuery("startDate").lte("now"));
queryBuilder.should(QueryBuilders.existsQuery("startDate"));
queryBuilder.filter(QueryBuilders.rangeQuery("endDate").gte("now"));
queryBuilder.should(QueryBuilders.existsQuery("endDate"));
boolQueryBuilder.filter(queryBuilder);
mysql 中的查询如下所示:
SELECT * FROM customer_job WHERE (start_date <= CURDATE() OR start_date IS NULL) AND (end_date>=CURDATE() OR end_date IS NULL);
那么怎么做呢?
我尝试按照答案进行操作,但仍然没有显示没有开始日期或结束日期的人:
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.existsQuery("startDate"))
.should(QueryBuilders.rangeQuery("startDate").lte("now"))
.minimumNumberShouldMatch(1);
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.existsQuery("endDate"))
.should(QueryBuilders.rangeQuery("endDate").gte("now"))
.minimumNumberShouldMatch(1);
boolQueryBuilder.filter(startDateQuery).filter(endDateQuery);
您需要这样的查询:
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.missingQuery("startDate"))
.should(QueryBuilders.rangeQuery("startDate").lte("now"))
.minimumShouldMatch(1);
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.missingQuery("endDate"))
.should(QueryBuilders.rangeQuery("endDate").gte("now"))
.minimumShouldMatch(1);
BoolQueryBuilder queryBuilder = new BoolQueryBuilder()
.filter(startDateQuery)
.filter(endDateQuery);
我想使用 elasticsearch(java 客户端)使用以下过滤器:
如果开始日期存在且低于现在
如果 endDate 存在并且大于现在
我已经有以下但它没有显示没有开始日期或结束日期的一次:
//Start date end date
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.filter(QueryBuilders.rangeQuery("startDate").lte("now"));
queryBuilder.should(QueryBuilders.existsQuery("startDate"));
queryBuilder.filter(QueryBuilders.rangeQuery("endDate").gte("now"));
queryBuilder.should(QueryBuilders.existsQuery("endDate"));
boolQueryBuilder.filter(queryBuilder);
mysql 中的查询如下所示:
SELECT * FROM customer_job WHERE (start_date <= CURDATE() OR start_date IS NULL) AND (end_date>=CURDATE() OR end_date IS NULL);
那么怎么做呢?
我尝试按照答案进行操作,但仍然没有显示没有开始日期或结束日期的人:
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.existsQuery("startDate"))
.should(QueryBuilders.rangeQuery("startDate").lte("now"))
.minimumNumberShouldMatch(1);
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.existsQuery("endDate"))
.should(QueryBuilders.rangeQuery("endDate").gte("now"))
.minimumNumberShouldMatch(1);
boolQueryBuilder.filter(startDateQuery).filter(endDateQuery);
您需要这样的查询:
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.missingQuery("startDate"))
.should(QueryBuilders.rangeQuery("startDate").lte("now"))
.minimumShouldMatch(1);
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.missingQuery("endDate"))
.should(QueryBuilders.rangeQuery("endDate").gte("now"))
.minimumShouldMatch(1);
BoolQueryBuilder queryBuilder = new BoolQueryBuilder()
.filter(startDateQuery)
.filter(endDateQuery);