当前位置: 首页 > 面试题库 >

ElasticSearch(2.2)startDate和endDate之间的Java过滤器(如果存在)

蓬宾白
2023-03-14
问题内容

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

如果存在startDate并降低到现在

如果endDate存在且现在更大

我已经有以下内容,但没有显示没有startDate或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);

那么该怎么做呢?

我尝试从答案中追随,但仍然没有显示没有startDate或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);


 类似资料:
  • 如何在执行查询前过滤ElasticSearch2.2中的文档。我引用了这个页面,但仍然无法框出正确的查询。 https://www.elastic.co/guide/en/elasticsearch/reference/2.2/query-filter-context.html 这就是我想做的…我有很多应该从句,每个有2个必须从句。WOLLE子句中的任何一个都应该匹配以检索文档。我只包括了一个sh

  • 我想允许用户选择日历上的开始和结束日期。我使用的是反应日期。 我希望它像下面这样工作 初始开始日期和结束日期将为空。当用户选择开始日期(如10月10日)时,第一次单击时,enddate也设置为startdate(10月10日),并且开始日期(10月10日)之前的日期和从开始日期算起6周后的日期将被禁用,现在当用户选择enddate(如10月13日)时,enddate设置为13th oct,并且在选

  • 问题内容: 我想查询日期范围内的elasticsearch文档。我现在有两个选择,两个都适合我。已经测试了他们两个。1.范围查询2.范围过滤器 由于我现在的数据集很小,因此无法测试它们的性能。两者有什么区别?哪个会导致更快地检索文档和更快地响应? 问题答案: 查询和过滤器之间的主要区别在于评分。查询将返回每个文档具有相对排名得分的文档。过滤器没有。这种差异使过滤器更快,有两个原因。首先,它不会产生

  • 我有一个名为的类,用它描述活动及其开始时间和结束时间。这些属性是、、。我必须使用流对这些活动进行分组和过滤,这些活动的总持续时间超过10小时。我成功地计算了持续时间的总和,并根据活动将它们分组:

  • 我从事elasticsearch,我尝试混合两个工作查询。第一个是“and filter”,第二个是“bool filter”,但我失败了。 我的查询是从用户交互界面动态生成的。 “和过滤器”: 我需要“和过滤器”来查询数据,例如,字段必须等于“非洲”或“亚洲”或为空。这是一个工作查询的示例: 此查询工作正常,结果如下: 现在我需要用字段“D\u TYPESTATUS”来限制结果数据,该字段必须与

  • 问题内容: 我有一个Amazon cloudsearch域。目的是过滤字段“ language”是否存在。并非所有对象都有一种语言,我想让那些确实过滤了语言的对象,但是也要返回没有任何语言的对象。 我想用(或language:’en’language:null)进行过滤 但是,不能在字符串中传递null。 这可能吗?如果是这样,将如何进行。 问题答案: 我也在别处看了看,似乎: 最简单的方法是为该