摘要

本文详细介绍了使用 Elasticsearch 7.3.0 和 RestHighLevelClient 进行索引与文档 CRUD 操作的完整流程。

一、版本矩阵

组件版本说明
Elasticsearch Server7.3.0代码示例基于此版本
Rest High Level Client7.3.0与服务端版本匹配
Java17maven.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 refusedES 节点地址配置错误检查 HttpHost 地址和端口
索引已存在重复创建同名索引先执行 indices().exists 检查
Mapping 解析异常JSON 结构语法错误使用在线 JSON 校验工具
搜索结果为空分词器配置不当检查 analyzer 配置

七、总结

本文提供了 Elasticsearch 7.3 Java API 的完整 CRUD 教程,包括:

  • Maven 依赖配置
  • RestHighLevelClient 初始化
  • 索引的创建与删除
  • 文档的增删改查
  • 常见错误排查指南

适合需要维护 ES7 系统的开发者参考学习。