Bra*_*ran 2 elasticsearch spring-boot elastic-stack elasticsearch-6
我正在使用高级 java rest 客户端(6.5),我需要根据某个日期范围过滤数据-让,我在同一索引中有这 4 个文档(添加了邮递员图像),而在 2 个文档中我没有 publish_date和 publish_end_date 字段,所以当我放置一个范围时,我需要介于这些范围和没有这些范围字段的文档之间的文档。
我从这个问题中得到了一些帮助 - 在 startDate 和 endDate 之间的 ElasticSearch (2.2) Java 过滤器如果存在,因为不推荐使用QueryBuilders.missingQuery所以我使用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"));
Run Code Online (Sandbox Code Playgroud)
当我只使用如下所示的 mustNot 查询时,我得到了想要的结果-
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.mustNot(QueryBuilders.existsQuery("publish_date"));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.mustNot(QueryBuilders.existsQuery("publish_end_date"));
Run Code Online (Sandbox Code Playgroud)
但问题是当我结合下面的两个查询时,我没有得到任何结果(得到一个空数组)-
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"));
Run Code Online (Sandbox Code Playgroud)
我想要结果 3 中的所有结果 1和结果 2值(这是我的要求)。
这是你应该做的:
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
.should(QueryBuilders.rangeQuery("publish_date").lte("now"))
.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("publish_date")));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3155 次 |
| 最近记录: |