gpt4 book ai didi

spring-boot - Elasticsearch - must(QueryBuilders.rangeQuery) 和 mustNot(QueryBuilders.existsQuery) 不能同时工作

转载 作者:行者123 更新时间:2023-12-02 22:15:13 34 4
gpt4 key购买 nike

我正在使用高级 java rest 客户端 (6.5),我需要根据某个日期范围过滤数据 - 假设,我在同一个索引和 2 个文档中有这 4 个文档(添加了 postman 图像)'没有 publish_date 和 publish_end_date 字段,所以当我放置一个范围时,我需要介于这些范围之间的文档和没有这些范围字段的文档。

Json Values

我从这个问题中得到了一些帮助- ElasticSearch (2.2) Java filter between startDate and endDate if exists由于 QueryBuilders.missingQuery 已弃用,因此我通过引用 here 来使用 mustNot(QueryBuilders.existsQuery)但它不起作用,我没有得到结果。

当我只使用如下范围查询时,它的工作正常-

BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_date").lte("now"));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_end_date").gte("now"));

result 1

当我只使用像下面这样的 mustNot 查询时,我得到了想要的结果-

BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.mustNot(QueryBuilders.existsQuery("publish_date"));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.mustNot(QueryBuilders.existsQuery("publish_end_date"));

result 2

但问题是,当我像下面这样组合两个查询时,我没有得到任何结果(得到一个空数组)-

BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_date").lte("now"))
.mustNot(QueryBuilders.existsQuery("publish_date"));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_end_date").gte("now"))
.mustNot(QueryBuilders.existsQuery("publish_end_date"));

result 3

我想要结果 3 中的所有结果 1结果 2 值(这是我的要求)。

最佳答案

这是你应该做的:

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
.should(QueryBuilders.rangeQuery("publish_date").lte("now"))
.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("publish_date")));

关于spring-boot - Elasticsearch - must(QueryBuilders.rangeQuery) 和 mustNot(QueryBuilders.existsQuery) 不能同时工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415330/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com