【用 Java API Client 操作 Elasticsearch】
一篇搞懂用 Java API Client 操作 Elasticsearch超详细 通俗易懂大家好这篇文章我们来从0开始讲清楚如何用Java API Client操作 Elasticsearch。一、什么是 Java API Client在 Elasticsearch 8.x 之后官方推荐使用Java API Clientco.elastic.clients替代旧的RestHighLevelClient已经被废弃它的特点是✅ 类型安全强类型不再是字符串拼JSON✅ API更现代✅ 和ES版本强绑定二、环境准备1️⃣ Maven 依赖dependencies!-- Elasticsearch Java API Client --dependencygroupIdco.elastic.clients/groupIdartifactIdelasticsearch-java/artifactIdversion8.12.0/version/dependency!-- 低级客户端 --dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-client/artifactIdversion8.12.0/version/dependency!-- JSON 处理 --dependencygroupIdjakarta.json/groupIdartifactIdjakarta.json-api/artifactIdversion2.0.1/version/dependency/dependencies2️⃣ 创建客户端这是所有操作的基础必须掌握。RestClientrestClientRestClient.builder(newHttpHost(localhost,9200)).build();ElasticsearchTransporttransportnewRestClientTransport(restClient,newJacksonJsonpMapper());ElasticsearchClientclientnewElasticsearchClient(transport); 一句话理解RestClient负责HTTP通信Transport负责数据转换Client我们真正用的API三、索引操作Index1️⃣ 创建索引client.indices().create(c-c.index(user_index));2️⃣ 删除索引client.indices().delete(d-d.index(user_index));3️⃣ 判断索引是否存在Booleanexistsclient.indices().exists(e-e.index(user_index)).value();System.out.println(exists);四、文档操作CRUD我们定义一个实体类classUser{publicStringname;publicintage;}1️⃣ 插入文档CreateUserusernewUser();user.name张三;user.age20;client.index(i-i.index(user_index).id(1).document(user));2️⃣ 查询文档ReadGetResponseUserresponseclient.get(g-g.index(user_index).id(1),User.class);Useruserresponse.source();System.out.println(user.name);3️⃣ 更新文档Updateclient.update(u-u.index(user_index).id(1).doc(newUser(){{age25;}}),User.class);4️⃣ 删除文档Deleteclient.delete(d-d.index(user_index).id(1));五、查询操作重点1️⃣ match 查询全文检索SearchResponseUserresponseclient.search(s-s.index(user_index).query(q-q.match(m-m.field(name).query(张三))),User.class);2️⃣ term 查询精确匹配.query(q-q.term(t-t.field(age).value(25)))3️⃣ 范围查询range.query(q-q.range(r-r.field(age).gte(JsonData.of(20)).lte(JsonData.of(30))))4️⃣ bool 查询组合查询.query(q-q.bool(b-b.must(m-m.match(mm-mm.field(name).query(张三))).filter(f-f.range(r-r.field(age).gte(JsonData.of(20)))))) 理解must必须满足参与评分filter过滤不参与评分更快5️⃣ 解析结果for(HitUserhit:response.hits().hits()){Useruserhit.source();System.out.println(user.name user.age);}六、分页查询SearchResponseUserresponseclient.search(s-s.index(user_index).from(0)// 起始位置.size(10)// 每页数量.query(q-q.match(m-m.field(name).query(张三))),User.class);七、排序.sort(s-s.field(f-f.field(age).order(SortOrder.Desc)))八、一个完整小案例推荐直接跑publicstaticvoidmain(String[]args)throwsException{ElasticsearchClientclientcreateClient();// 1. 创建索引client.indices().create(c-c.index(user_index));// 2. 插入数据UserusernewUser();user.name李四;user.age30;client.index(i-i.index(user_index).id(1).document(user));// 3. 查询SearchResponseUserresponseclient.search(s-s.index(user_index).query(q-q.match(m-m.field(name).query(李四))),User.class);// 4. 输出for(HitUserhit:response.hits().hits()){System.out.println(hit.source().name);}}九、常见坑一定要看⚠️❌ 1. 版本不一致Java Client 和 ES 服务端版本必须接近❌ 2. 字段类型问题text → 不能 term 查询keyword → 才能精确匹配❌ 3. JSON 转换问题推荐使用 JacksonJsonpMapper❌ 4. 中文查询问题需要分词器ik分词器等十、总结一句话总结 Java API Client 更安全、更优雅的ES操作方式
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2422284.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!