Summary

This article details the complete flow for index and document CRUD operations using Elasticsearch 7.3.0 and RestHighLevelClient.

1. Version Matrix

ComponentVersionNote
Elasticsearch Server7.3.0Code examples based on this version
Rest High Level Client7.3.0Match with server version
Java17maven.compiler.source/target=17

2. Maven Dependencies Config

<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>

3. Create 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. Index Operations

4.1 Create Index (JSON Way)

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 Create Index (Object Way)

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 Delete Index

DeleteIndexRequest deleteRequest = new DeleteIndexRequest("wzk-icu-es-test");
AcknowledgedResponse deleteResponse = client.indices().delete(deleteRequest, RequestOptions.DEFAULT);

5. Document Operations

5.1 Add Document

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 Query Document

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 Query All Documents

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();
}

6. Error Quick Reference

SymptomRoot CauseFix
Connection refusedES node address config wrongCheck HttpHost address and port
Index already existsCreating same name index repeatedlyFirst execute indices().exists check
Mapping parsing exceptionJSON structure syntax errorUse online JSON validation tool
Search result emptyTokenizer config improperCheck analyzer config

7. Summary

This article provides complete CRUD tutorial for Elasticsearch 7.3 Java API, including:

  • Maven dependencies config
  • RestHighLevelClient initialization
  • Index creation and deletion
  • Document CRUD
  • Common error troubleshooting guide

Suitable for developers who need to maintain ES7 systems for reference and learning.