Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Elasticsearch-必须(QueryBuilders.rangeQuery)和不得(QueryBuilders.existsQuery)同时不工作_Spring Boot_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Elastic Stack_Elasticsearch 6 - Fatal编程技术网 elasticsearch,elastic-stack,elasticsearch-6,Spring Boot,elasticsearch,Elastic Stack,Elasticsearch 6" /> elasticsearch,elastic-stack,elasticsearch-6,Spring Boot,elasticsearch,Elastic Stack,Elasticsearch 6" />

Spring boot Elasticsearch-必须(QueryBuilders.rangeQuery)和不得(QueryBuilders.existsQuery)同时不工作

Spring boot Elasticsearch-必须(QueryBuilders.rangeQuery)和不得(QueryBuilders.existsQuery)同时不工作,spring-boot,elasticsearch,elastic-stack,elasticsearch-6,Spring Boot,elasticsearch,Elastic Stack,Elasticsearch 6,我使用的是高级java rest客户端(6.5),我需要根据某个日期范围过滤数据-让我看看,我有这4个文档(添加了一个邮递员图像)在同一个索引和两个文档中,我没有“发布日期”和“发布结束日期”字段,因此当我放置一个范围时,我需要介于这些范围和没有这些范围字段的文档之间的文档 我从这个问题中得到了一些帮助- 由于QueryBuilders.missingQuery已被弃用,因此我通过引用使用mustNot(QueryBuilders.existsQuery),但它不起作用,我得不到结果 当我只使

我使用的是高级java rest客户端(6.5),我需要根据某个日期范围过滤数据-让我看看,我有这4个文档(添加了一个邮递员图像)在同一个索引和两个文档中,我没有“发布日期”和“发布结束日期”字段,因此当我放置一个范围时,我需要介于这些范围和没有这些范围字段的文档之间的文档

我从这个问题中得到了一些帮助- 由于QueryBuilders.missingQuery已被弃用,因此我通过引用使用mustNot(QueryBuilders.existsQuery),但它不起作用,我得不到结果

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

BoolQueryBuilder startDateQuery=newboolquerybuilder()
.must(QueryBuilders.rangeQuery(“发布日期”).lte(“现在”);
BoolQueryBuilder endDateQuery=newboolquerybuilder()
.must(QueryBuilders.rangeQuery(“发布结束日期”).gte(“现在”);

当我只使用下面的mustNot查询时,我得到了期望的结果-

BoolQueryBuilder startDateQuery=newboolquerybuilder()
.mustNot(QueryBuilders.existsQuery(“发布日期”);
BoolQueryBuilder endDateQuery=newboolquerybuilder()
.mustNot(QueryBuilders.existsQuery(“发布结束日期”);

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

BoolQueryBuilder startDateQuery=newboolquerybuilder()
.must(QueryBuilders.rangeQuery(“发布日期”).lte(“现在”))
.mustNot(QueryBuilders.existsQuery(“发布日期”);
BoolQueryBuilder endDateQuery=newboolquerybuilder()
.must(QueryBuilders.rangeQuery(“发布\结束\日期”).gte(“现在”))
.mustNot(QueryBuilders.existsQuery(“发布结束日期”);


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

您的查询出了问题,因此没有结果

BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
           .must(QueryBuilders.rangeQuery("publish_date").lte("now"))
           .mustNot(QueryBuilders.existsQuery("publish_date"));
这意味着应用程序将在存储库中搜索不包含“发布日期”的结果,但同时将“发布日期”设置为lte(“现在”)。同样,另一个查询也存在同样的问题

无法组合您用于results1和results2的查询

此查询的集合为空,这就是为什么没有结果

编辑: 在elasticsearch中,应该使用“应该”,意思是“或”

BoolQueryBuilder startDateQuery = QueryBuilders.boolQuery()
  .should(QueryBuilders.rangeQuery("publish_date").lte("now"))
  .should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("publish_date")));
与endDateQuery类似:

BoolQueryBuilder endDateQuery = QueryBuilders.boolQuery()
  .should(QueryBuilders.rangeQuery("publish_end_date").gte("now"))
  .should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("publish__end_date")));

以下是您应该做的:

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

那么,我怎样才能得到组合,或者根据我的要求,怎样进行查询呢?你能帮我吗?你可以使用“应该”这个类似于“或”的函数。请参阅@dadoonet答案和我的编辑!