Elasticsearch 6.2 Java API如何实现自动生成文档ID?
实现Elasticsearch自动生成文档ID的修改方案
没问题,我帮你调整代码实现自动生成ID的需求~
你当前的代码里,IndexRequest构造方法的第三个参数user.username就是手动指定的文档ID,要让Elasticsearch自动生成ID,只需要移除这个ID参数即可,具体修改如下:
修改后的完整代码
java.util.Map<String, Object> jsonMap = new HashMap<String, Object>(); jsonMap.put("username", user.username); jsonMap.put("password", user.password); jsonMap.put("mail", user.mail); jsonMap.put("friends", user.friends); jsonMap.put("maps", user.maps); // 移除构造方法里的第三个ID参数,ES会自动生成随机ID IndexRequest indexRequest = new IndexRequest("users", "doc") .source(jsonMap) .opType(DocWriteRequest.OpType.CREATE);
关键说明
- Elasticsearch在你不手动指定文档ID时,会自动生成一个长度为20的URL-safe Base64随机字符串作为ID,完全符合自动生成的需求。
- 如果你需要在插入后获取这个自动生成的ID,可以在执行索引请求后通过响应对象获取:
// 假设你已经有Elasticsearch Client实例client IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT); String autoGeneratedId = response.getId(); // 这里就是自动生成的文档ID
额外优化(针对ES7+版本)
从Elasticsearch 7.x开始,官方逐步废弃了文档类型(也就是你代码里的doc),如果你的ES版本是7及以上,推荐使用更简洁的构造方法:
IndexRequest indexRequest = new IndexRequest("users") .source(jsonMap) .opType(DocWriteRequest.OpType.CREATE);
内容的提问来源于stack exchange,提问作者Zul Huky
相关产品推荐
相关产品推荐

