第一步引入jar
<!--elasticsearch--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.14.0</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.14.0</version> </dependency>
第二部编写公共方法
@Configuration public class ElasticSearchConfig { /** * 创建单例模式的RequestOptions,使得所有请求共用 */ public static final RequestOptions COMMON_OPTIONS; static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); // builder.addHeader("Authorization", "Bearer " + TOKEN); // builder.setHttpAsyncResponseConsumerFactory( // new HttpAsyncResponseConsumerFactory // .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024)); COMMON_OPTIONS = builder.build(); } @Bean public RestHighLevelClient client() { RestClientBuilder builder= RestClient.builder(new HttpHost("192.168.0.71", 9200, "http")); RestHighLevelClient client = new RestHighLevelClient(builder); return client; } }
如果多个地址 按照下面的方法进行连接
new HttpHost("192.168.0.71", 9200, "http"),new HttpHost("192.168.0.72", 9200, "http")
第三步可以在controller或service层经行操作
@Autowired //引入对象 private RestHighLevelClient client; /** * jackson的objectMapper */ ObjectMapper objectMapper=new ObjectMapper(); @GetMapping("/add")//添加索引 public void getById(String id) throws IOException { IndexRequest request=new IndexRequest("users"); request.id("1"); //数据转为json格式 Users user=new Users("zhengkeke","女",9); String userString=objectMapper.writeValueAsString(user); request.source(userString, XContentType.JSON); //执行保存操作 IndexResponse indexResponse=client.index(request, ElasticSearchConfig.COMMON_OPTIONS); System.out.println(indexResponse); } @GetMapping("/getUser")//根据索引判断是否存在 public void getUser(String id) throws IOException { GetIndexRequest request = new GetIndexRequest("users"); boolean exists = client.indices().exists(request, RequestOptions.DEFAULT); System.out.println(exists); } @GetMapping("/delIndex")//删除索引 public void delIndex(String id) throws IOException { DeleteIndexRequest request = new DeleteIndexRequest("users"); AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT); System.out.println(delete.isAcknowledged()); } @GetMapping("/getIndex")//根据索引获取数据 public void getIndex(String id) throws IOException { GetRequest request = new GetRequest("users", "1"); GetResponse getResponse = client.get(request, RequestOptions.DEFAULT); System.out.println(getResponse.getSourceAsString()); // 打印文档的内容 System.out.println(getResponse); // 这里返回的全部内容和命令是一样的 } @GetMapping("/updateIndex")//根据索引修改数据 public void updateIndex(String id) throws IOException { UpdateRequest request = new UpdateRequest("users", "1"); request.timeout("1s"); Users user=new Users("李四","男",16); String userString=objectMapper.writeValueAsString(user); request.doc(userString,XContentType.JSON); UpdateResponse update = client.update(request, RequestOptions.DEFAULT); System.out.println(update.status()); } @GetMapping("/getIndexs")//根据索引获取数据然后在根据条件查询 public void getIndexs(String id) throws IOException { SearchRequest request = new SearchRequest("users"); // 构建搜索条件 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // 查询条件,我们可以用QueryBuilders工具类来实现 // QueryBuilders.termQuery 精确 // QueryBuilders.matchAllQuery() 匹配所有 TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sexl", "男");//根据名称查询 // MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery(); sourceBuilder.query(termQueryBuilder); // sourceBuilder.from(); // sourceBuilder.size(); request.source(sourceBuilder); SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT); SearchHits hits = searchResponse.getHits(); System.out.println(hits.toString()); System.out.println("============================"); for (SearchHit hit : hits.getHits()) { System.out.println(hit.getSourceAsMap()); } } // 批量插入 @GetMapping("/batchIndexs")//根据索引获取数据然后在根据条件查询 public void batchIndexs(String id) throws IOException { BulkRequest request = new BulkRequest(); request.timeout("10s"); ArrayList<Users> users = new ArrayList<>(); users.add(new Users("李四","男",11)); users.add(new Users("张三","女",12)); users.add(new Users("王五","男",13)); users.add(new Users("赵六","女",14)); users.add(new Users("测试","女",15)); for (int i = 0; i < users.size(); i++) { String userString=objectMapper.writeValueAsString(users.get(i));//转换成字符串 // 批量更新和批量删除,就在这里修改对应的请求 request.add( new IndexRequest("chen_index") .id(""+i) .source(userString,XContentType.JSON)); } BulkResponse bulk = client.bulk(request, RequestOptions.DEFAULT); // 是否失败,返回false代表成功 System.out.println(bulk.hasFailures()); }