es java api 批量删除_Elasticsearch-使用Java API删除嵌套对象不起作用

我有一个Elasticsearch文档,其中包含嵌套对象,我希望能够通过java update api删除它们。这是包含脚本的代码:

UpdateRequest updateRequest = new UpdateRequest(INDEX, "thread", String.valueOf(threadId));

updateRequest.script("for (int i = 0; i < ctx._source.messages.size(); i++){if(ctx._source.messages[i]._message_id == " + messageId + ")" +

"{ctx._source.messages.remove(i);i--;}}", ScriptService.ScriptType.INLINE);

client.update(updateRequest).actionGet();

这是我的文档的映射:

{

"thread_and_messages": {

"mappings": {

"thread": {

"properties": {

"messages": {

"type": "nested",

"include_in_parent": true,

"properties": {

"message_id": {

"type": "string"

},

"message_nick": {

"type": "string"

},

"message_text": {

"type": "string"

}

}

},

"thread_id": {

"type": "long"

}

}

}

}

}

}

我没有收到任何错误消息,但是当我在索引上运行查询以查找该嵌套文档时,它并没有被删除。有人可以让我知道我在做什么错吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是如何使用 Java API 获取 Elasticsearch 中的总数。 您可以使用 Elasticsearch Java API 中的 `SearchRequest` 和 `SearchResponse` 来实现。具体实现步骤如下: 1. 创建一个 `SearchRequest` 对象,并设置需要查询的 index。 ```java SearchRequest searchRequest = new SearchRequest("your_index_name"); ``` 2. 创建一个 `SearchSourceBuilder` 对象,并设置需要查询的条件。这里我们只需要查询总数,所以只需要设置一个 `size` 为 0 的参数即可。 ```java SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.size(0); ``` 3. 将 `SearchSourceBuilder` 对象设置到 `SearchRequest` 中。 ```java searchRequest.source(searchSourceBuilder); ``` 4. 执行查询,并获取查询结果中的总数。 ```java SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); long totalHits = searchResponse.getHits().getTotalHits().value; ``` 注意:在执行查询之前,需要先创建一个 `RestHighLevelClient` 对象,并设置好连接 Elasticsearch 的参数。 完整的 Java 代码示例: ```java RestHighLevelClient restHighLevelClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); SearchRequest searchRequest = new SearchRequest("your_index_name"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.size(0); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); long totalHits = searchResponse.getHits().getTotalHits().value; restHighLevelClient.close(); ``` 希望这个回答能够帮助到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值