SpringBoot+Elasticsearch使用resthighlevelclient對(duì)象刪除指定的文檔數(shù)據(jù)
使用客戶端刪除
在 Kibana 中,你可以使用 Dev Tools 或者 Console 來執(zhí)行 Elasticsearch 查詢和刪除操作。
? 以下是一個(gè)使用 Dev Tools 執(zhí)行刪除文檔的示例:
? 1.打開 Kibana,轉(zhuǎn)到左側(cè)導(dǎo)航欄的 “Dev Tools” 或者 “Console”。
? 2.在 Dev Tools 或者 Console 中輸入如下刪除請(qǐng)求:
POST /your_index/_delete_by_query
{
"query": {
"term": {
"name.keyword": "張三"
}
}
}
請(qǐng)?zhí)鎿Q /your_index/
為你實(shí)際的索引名稱。這個(gè)請(qǐng)求會(huì)刪除索引中所有 “name” 字段值為 “張三” 的文檔。
- 然后點(diǎn)擊 “Run” 或者使用快捷鍵執(zhí)行該請(qǐng)求。
請(qǐng)注意,name.keyword
是默認(rèn)情況下使用的字符串字段的名稱,確保在你的映射中使用了正確的字段名稱。如果你的 “name” 字段不是關(guān)鍵字類型(keyword),你可能需要調(diào)整查詢條件。
確保在執(zhí)行刪除操作之前做好備份,并謹(jǐn)慎操作,因?yàn)閯h除操作是不可逆的。
1、第一種
在Spring Boot中使用RestHighLevelClient
刪除Elasticsearch中的文檔數(shù)據(jù),你可以通過以下方式實(shí)現(xiàn):
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
@Service
public class ElasticsearchService {
@Autowired
private RestHighLevelClient elasticsearchClient;
public void deleteDocumentByName(String name, String indexName, String typeName) throws IOException {
// 構(gòu)建DeleteRequest
DeleteRequest deleteRequest = new DeleteRequest(indexName, typeName, name);
// 可以設(shè)置其他參數(shù),如路由、超時(shí)等
// deleteRequest.routing("your-routing");
// deleteRequest.timeout("10s");
// 執(zhí)行刪除請(qǐng)求
DeleteResponse deleteResponse = elasticsearchClient.delete(deleteRequest, RequestOptions.DEFAULT);
// 處理刪除響應(yīng)
String index = deleteResponse.getIndex();
String id = deleteResponse.getId();
long version = deleteResponse.getVersion();
System.out.println("Deleted document with id " + id + " from index " + index + " with version " + version);
}
}
在上面的代碼中,首先構(gòu)建了一個(gè)DeleteRequest
對(duì)象,指定了要?jiǎng)h除的文檔的索引、類型(如果有)、文檔ID。然后使用RestHighLevelClient
的delete
方法執(zhí)行刪除請(qǐng)求,并通過DeleteResponse
獲取刪除的結(jié)果。
請(qǐng)注意,Elasticsearch 7.x 版本已經(jīng)移除了類型(type)的概念,因此在新的索引中,typeName
參數(shù)可能是可選的,具體取決于你的Elasticsearch版本和索引的映射設(shè)置。如果你的索引中沒有使用類型,可以將typeName
設(shè)置為null
或者省略。
2、第二種在 Elasticsearch 7.x 以前
如果你的Elasticsearch索引中有一個(gè)字段名為 “name”,并且你想要?jiǎng)h除該字段值為 “張三” 的文檔,可以使用 Elasticsearch 的 Query DSL 來構(gòu)建一個(gè)刪除請(qǐng)求。以下是一個(gè)示例代碼,演示如何使用 RestHighLevelClient
來刪除具有特定 “name” 值的文檔:
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
@Service
public class ElasticsearchService {
@Autowired
private RestHighLevelClient elasticsearchClient;
public void deleteDocumentByName(String name, String indexName) throws IOException {
// 構(gòu)建查詢請(qǐng)求,查找具有特定 name 值的文檔
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("name", name));
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.source(searchSourceBuilder);
// 執(zhí)行查詢請(qǐng)求
SearchResponse searchResponse = elasticsearchClient.search(searchRequest, RequestOptions.DEFAULT);
// 遍歷查詢結(jié)果,獲取文檔 ID 并刪除文檔
for (var hit : searchResponse.getHits().getHits()) {
String documentId = hit.getId();
deleteDocumentById(indexName, documentId);
}
}
private void deleteDocumentById(String indexName, String documentId) throws IOException {
// 構(gòu)建刪除請(qǐng)求
DeleteRequest deleteRequest = new DeleteRequest(indexName, documentId);
// 執(zhí)行刪除請(qǐng)求
DeleteResponse deleteResponse = elasticsearchClient.delete(deleteRequest, RequestOptions.DEFAULT);
// 處理刪除響應(yīng)
String index = deleteResponse.getIndex();
String id = deleteResponse.getId();
long version = deleteResponse.getVersion();
System.out.println("Deleted document with id " + id + " from index " + index + " with version " + version);
}
}
上面的代碼首先構(gòu)建一個(gè)搜索請(qǐng)求,使用 QueryBuilders.termQuery
來匹配具有特定 “name” 值的文檔。然后,遍歷搜索結(jié)果,獲取文檔的 ID,并使用 deleteDocumentById
方法刪除相應(yīng)的文檔。請(qǐng)確保在實(shí)際使用中進(jìn)行適當(dāng)?shù)腻e(cuò)誤處理和資源管理。
3、第三種在 Elasticsearch 7.x 中
在 Elasticsearch 7.x 中,不再支持直接刪除文檔時(shí)使用 SearchRequest
查詢文檔然后刪除的方式,而是直接使用 DeleteByQueryRequest
來執(zhí)行刪除操作。以下是一個(gè)正確的示例代碼:
import org.elasticsearch.action.delete.DeleteByQueryRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
@Service
public class ElasticsearchService {
@Autowired
private RestHighLevelClient elasticsearchClient;
public void deleteDocumentByName(String name, String indexName) throws IOException {
// 構(gòu)建刪除請(qǐng)求,刪除具有特定 name 值的文檔
DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(indexName);
deleteByQueryRequest.setQuery(QueryBuilders.termQuery("name", name));
// 執(zhí)行刪除請(qǐng)求
elasticsearchClient.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT);
System.out.println("Deleted documents with name " + name + " from index " + indexName);
}
}
在這個(gè)示例中,使用了 DeleteByQueryRequest
來構(gòu)建刪除請(qǐng)求,并通過 QueryBuilders.termQuery
指定要?jiǎng)h除的文檔的條件(在這里是 “name” 字段等于 “張三”)。然后,通過 elasticsearchClient.deleteByQuery
執(zhí)行刪除操作。請(qǐng)確保在實(shí)際使用中進(jìn)行適當(dāng)?shù)腻e(cuò)誤處理和資源管理。
4、批量刪除
要批量刪除 Elasticsearch 中符合特定條件的文檔,你可以使用 DeleteByQueryRequest
。以下是一個(gè)示例代碼,演示如何使用 RestHighLevelClient
批量刪除具有特定 “name” 值的文檔:文章來源:http://www.zghlxwxcb.cn/news/detail-818805.html
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
@Service
public class ElasticsearchService {
@Autowired
private RestHighLevelClient elasticsearchClient;
public void deleteDocumentsByName(String name, String indexName) throws IOException {
// 構(gòu)建批量刪除請(qǐng)求
BulkRequest bulkRequest = new BulkRequest();
// 構(gòu)建查詢請(qǐng)求,查找具有特定 name 值的文檔
bulkRequest.add(new DeleteByQueryRequest(indexName)
.setQuery(QueryBuilders.termQuery("name", name)));
// 執(zhí)行批量刪除請(qǐng)求
elasticsearchClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println("Deleted documents with name " + name + " from index " + indexName);
}
}
在這個(gè)示例中,使用了 BulkRequest
來批量構(gòu)建刪除請(qǐng)求。對(duì)于每個(gè)刪除請(qǐng)求,使用 DeleteByQueryRequest
來指定要?jiǎng)h除的文檔的條件(在這里是 “name” 字段等于 “張三”)。然后,通過 elasticsearchClient.bulk
執(zhí)行批量刪除操作。請(qǐng)確保在實(shí)際使用中進(jìn)行文章來源地址http://www.zghlxwxcb.cn/news/detail-818805.html
到了這里,關(guān)于SpringBoot+Elasticsearch使用resthighlevelclient對(duì)象刪除指定的文檔數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!