ElasticSearch(2.2)startDate和endDate之间的Java过滤器(如果存在) [英] ElasticSearch (2.2) Java filter between startDate and endDate if exists

查看:81
本文介绍了ElasticSearch(2.2)startDate和endDate之间的Java过滤器(如果存在)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Elasticsearch(Java客户端)中使用以下过滤器:

I want to have following filter with elasticsearch (java client):

如果存在startDate并降低到现在,则

If startDate exists and lower then now

如果endDate存在并且现在更大了

If endDate exists and greater then now

我已经关注了,但是没有显示没有startDate或endDate的那一次:

I already have following but it doesn't show the once which have no startDate or 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中的查询如下:

The query in mysql looked like this:

SELECT * FROM customer_job WHERE (start_date <= CURDATE() OR start_date IS NULL) AND (end_date>=CURDATE() OR end_date IS NULL);

那么该怎么做?

我尝试了以下答案,但仍然没有显示没有startDate或endDate的内容:

I tried following from the answers but it still does not show the ones who have no startDate or endDate:

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(2.2)startDate和endDate之间的Java过滤器(如果存在)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆