小编Bra*_*ran的帖子

Elasticsearch - must(QueryBuilders.rangeQuery) 和 mustNot(QueryBuilders.existsQuery) 一次不工作

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

JSON 值

我从这个问题中得到了一些帮助 - 在 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)

结果 1

当我只使用如下所示的 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)

结果 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"));
Run Code Online (Sandbox Code Playgroud)

结果 3

我想要结果 3 中的所有 …

elasticsearch spring-boot elastic-stack elasticsearch-6

2
推荐指数
1
解决办法
3155
查看次数

Elasticsearch(6.5) 高级 Java Rest 客户端按名称删除索引不起作用

我可以通过传递索引名称、类型和 id 来删除文档,如下所示-

DeleteRequest deleteRequest = new DeleteRequest(data.getIndexName(),data.getType(),data.getUniqueId());

    DeleteResponse deleteResponse = client.delete(deleteRequest);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试通过仅给出索引名称来删除索引时,如下所示-(根据本文档

DeleteRequest deleteRequest = new DeleteRequest(allData.getIndexName());

    DeleteResponse deleteResponse = client.delete(deleteRequest);
Run Code Online (Sandbox Code Playgroud)

得到-

org.elasticsearch.action.ActionRequestValidationException: Validation Failed: 1: type is missing;2: id is missing;
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的另一种方法(参考

DeleteIndexRequest request = new DeleteIndexRequest(allData.getIndexName());
    AcknowledgedResponse deleteIndexResponse = client.indices().delete(request, RequestOptions.DEFAULT);
Run Code Online (Sandbox Code Playgroud)

得到:

java.lang.NoSuchMethodError: 
at org.elasticsearch.client.IndicesClient.delete(IndicesClient.java:93) ~[elasticsearch-rest-high-level-client-6.5.4.jar:6.4.3]
Run Code Online (Sandbox Code Playgroud)

我正在使用这个依赖项:

<dependency>
       <groupId>org.elasticsearch.client</groupId>
       <artifactId>elasticsearch-rest-high-level-client</artifactId>
       <version>6.5.4</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

mvn依赖:树

[INFO] \- org.elasticsearch.client:elasticsearch-rest-high-level- 
client:jar:6.5.4:compile
[INFO]    +- org.elasticsearch:elasticsearch:jar:6.4.3:compile
[INFO]    |  +- org.elasticsearch:elasticsearch-core:jar:6.4.3:compile
[INFO]    |  +- org.elasticsearch:elasticsearch-secure- 
sm:jar:6.4.3:compile
[INFO]    |  +- org.elasticsearch:elasticsearch-x- …
Run Code Online (Sandbox Code Playgroud)

java elasticsearch spring-boot elastic-stack

2
推荐指数
1
解决办法
3197
查看次数