java - 具有空日期或值的 QueryBuilders rangeQuery

标签 java elasticsearch aggregation

试图找到范围查询的解决方案 使用 QueryBuilders.rangeQuery

问题: DateFrom 可以为空或大于今天 DateTill 可以为 null 或小于今天 剩余数量可以为 null 或值可以大于 0

只有这样,文档才必须出现在我试图解决此问题的搜索结果中

         publishedFilter.should(QueryBuilders.boolQuery()
                .mustNot(QueryBuilders.existsQuery(SearchAble.QUANTITY_REMAINING)))
            .should(QueryBuilders.rangeQuery(SearchAble.QUANTITY_REMAINING).gte(1))
            .minimumShouldMatch(1);

        publishedFilter.should(QueryBuilders.boolQuery()
            .mustNot(QueryBuilders.existsQuery(SearchAble.DATE_TIME_FROM))
            .should(QueryBuilders.rangeQuery(SearchAble.DATE_TIME_FROM).lte(time))
        );

        publishedFilter.should(QueryBuilders.boolQuery()
            .mustNot(QueryBuilders.existsQuery(SearchAble.DATE_TIME_TILL))
            .should(QueryBuilders.rangeQuery(SearchAble.DATE_TIME_TILL).gte(time))
        );

但此解决方案仅适用于剩余数量,而不适用于 dateFrom 和 dateTill

有什么想法吗?

最佳答案

我会这样做:

    // at least one of the OR conditions must match
    publishedFilter.minimumShouldMatch(1);

    // OR condition for Quantity
    publishedFilter.should(QueryBuilders.boolQuery()
        .should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(SearchAble.QUANTITY_REMAINING)))
        .should(QueryBuilders.rangeQuery(SearchAble.QUANTITY_REMAINING).gte(1))
    );

    // OR condition for Date From
    publishedFilter.should(QueryBuilders.boolQuery()
        .should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(SearchAble.DATE_TIME_FROM)))
        .should(QueryBuilders.rangeQuery(SearchAble.DATE_TIME_FROM).lte(time))
    );

    // OR condition for Date Till
    publishedFilter.should(QueryBuilders.boolQuery()
        .should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(SearchAble. DATE_TIME_TILL)))
        .should(QueryBuilders.rangeQuery(SearchAble. DATE_TIME_TILL).gte(time))
    );

关于java - 具有空日期或值的 QueryBuilders rangeQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57987975/

相关文章:

elasticsearch - Kibana的脚本字段可以在运行时运行吗?

inheritance - 将两个对象与继承和聚合相关联是不是糟糕的编程习惯?

Elasticsearch 聚合按每个桶的前一个结果过滤

MySQL 按 10 天聚合数据

java - 通用决策树算法代码实现

java - 如何使用 Selenium 查找页面上是否存在文本

java - 关键字 "transient"在 Java 中是什么意思?

java - jackson 反序列化带有额外字段的 map

mongodb - elasticsearch 2.2.0 支持的 elastic river-mongodb 插件的替代品是什么?

elasticsearch - Elasticsearch 嵌套查询是否可以只返回嵌套字段的匹配嵌套文档?