摘要
本文详细介绍了使用 Elasticsearch 7.3.0 和 RestHighLevelClient 进行索引与文档 CRUD 操作的完整流程。
一、版本矩阵
| 组件 | 版本 | 说明 |
|---|---|---|
| Elasticsearch Server | 7.3.0 | 代码示例基于此版本 |
| Rest High Level Client | 7.3.0 | 与服务端版本匹配 |
| Java | 17 | maven.compiler.source/target=17 |
二、Maven 依赖配置
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.3.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.3.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
三、创建 RestHighLevelClient
RestClientBuilder builder = RestClient.builder(
new HttpHost("h121.wzk.icu", 9200, "http"),
new HttpHost("h122.wzk.icu", 9200, "http"),
new HttpHost("h123.wzk.icu", 9200, "http")
);
RestHighLevelClient client = new RestHighLevelClient(builder);
四、索引操作
4.1 创建索引(JSON 方式)
CreateIndexRequest indexRequest = new CreateIndexRequest("wzk-icu-es-test");
String mapping = "{\"settings\":{},\"mappings\":{\"properties\":{\"description\":{\"type\":\"text\",\"analyzer\":\"ik_max_word\"},\"name\":{\"type\":\"text\"}}}}";
indexRequest.source(mapping, XContentType.JSON);
CreateIndexResponse indexResponse = client.indices().create(indexRequest, RequestOptions.DEFAULT);
4.2 创建索引(对象方式)
CreateIndexRequest createIndexRequest = new CreateIndexRequest("wzk-icu-es-2");
createIndexRequest.settings(Settings.builder()
.put("index.number_of_shards", 5)
.put("index.number_of_replicas", 1)
.build());
XContentBuilder xContentBuilder = XContentFactory.jsonBuilder();
xContentBuilder.startObject();
xContentBuilder.startObject("properties");
xContentBuilder.startObject("description").field("type", "text").field("analyzer", "ik_max_word").endObject();
xContentBuilder.endObject();
xContentBuilder.endObject();
createIndexRequest.mapping(xContentBuilder);
4.3 删除索引
DeleteIndexRequest deleteRequest = new DeleteIndexRequest("wzk-icu-es-test");
AcknowledgedResponse deleteResponse = client.indices().delete(deleteRequest, RequestOptions.DEFAULT);
五、文档操作
5.1 添加文档
IndexRequest indexRequest = new IndexRequest("wzk-icu-es-2").id("1");
String str = "{\"name\":\"spark添加文档\",\"description\":\"spark技术栈\",\"studymodel\":\"online\"}";
indexRequest.source(str, XContentType.JSON);
IndexResponse index = client.index(indexRequest, RequestOptions.DEFAULT);
5.2 查询文档
GetRequest getRequest = new GetRequest("wzk-icu-es-2");
getRequest.id("1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
Map<String, Object> sourceMap = getResponse.getSourceAsMap();
5.3 查询所有文档
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("wzk-icu-es-2");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
for (SearchHit sh : hits.getHits()) {
Map<String, Object> map = sh.getSourceAsMap();
}
六、错误速查表
| 症状 | 根因 | 修复 |
|---|---|---|
| Connection refused | ES 节点地址配置错误 | 检查 HttpHost 地址和端口 |
| 索引已存在 | 重复创建同名索引 | 先执行 indices().exists 检查 |
| Mapping 解析异常 | JSON 结构语法错误 | 使用在线 JSON 校验工具 |
| 搜索结果为空 | 分词器配置不当 | 检查 analyzer 配置 |
七、总结
本文提供了 Elasticsearch 7.3 Java API 的完整 CRUD 教程,包括:
- Maven 依赖配置
- RestHighLevelClient 初始化
- 索引的创建与删除
- 文档的增删改查
- 常见错误排查指南
适合需要维护 ES7 系统的开发者参考学习。