版本以 Elasticsearch 7.x 为主(目前最常用)
一、依赖(Maven)
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.0</version> </dependency>
二、初始化客户端
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")) );
三、新增文档(Create / Index)
1.普通新增(自动生成 ID)
IndexRequest request = new IndexRequest("user"); request.source(XContentFactory.jsonBuilder().startObject().field("name", "张三").field("age", 25).endObject());IndexResponse response = client.index(request, RequestOptions.DEFAULT);
2.指定 ID 新增
IndexRequest request = new IndexRequest("user").id("1001"); // ... 其他同上
四、查询文档(Get)
GetRequest request = new GetRequest("user", "1001"); GetResponse response = client.get(request, RequestOptions.DEFAULT);if (response.isExists()) {String name = response.getSource().get("name").toString(); }
五、更新文档(Update)
1.局部更新
UpdateRequest request = new UpdateRequest("user", "1001"); request.doc(XContentFactory.jsonBuilder().startObject().field("age", 26).endObject());UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
2.upsert(不存在则插入)
request.upsert(XContentFactory.jsonBuilder().startObject().field("name", "张三").field("age", 25).endObject());
六、删除文档(Delete)
DeleteRequest request = new DeleteRequest("user", "1001"); DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
七、批量操作(Bulk)
BulkRequest request = new BulkRequest();request.add(new IndexRequest("user").id("1002").source(XContentFactory.jsonBuilder().startObject().field("name", "李四").endObject()));request.add(new DeleteRequest("user", "1001"));BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
八、搜索(Search)
1.基本搜索
SearchRequest request = new SearchRequest("user"); SearchSourceBuilder source = new SearchSourceBuilder();// 条件查询 source.query(QueryBuilders.termQuery("name", "张三"));request.source(source); SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {Map<String, Object> map = hit.getSourceAsMap(); }
2.分页 + 排序
source.from(0); source.size(10); source.sort("age", SortOrder.DESC);
3.多条件 bool 查询
BoolQueryBuilder bool = QueryBuilders.boolQuery(); bool.must(QueryBuilders.termQuery("name", "张三")); bool.filter(QueryBuilders.rangeQuery("age").gte(20));source.query(bool);
九、关闭客户端
client.close();