java操作ElasticSearch相关API
一、索引操作
-
创建和删除索引
//1、创建索引 CreateIndexRequest request = new CreateIndexRequest("posts"); client.indices().create(request, RequestOptions.DEFAULT); //2、删除索引 DeleteIndexRequest request=new DeleteIndexRequest("posts"); AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
二、文档操作
-
添加文档
@Test void contextLoads() throws IOException { Post post = postMapper.selectById(2);//数据库查询到的文章 //构建请求 IndexRequest request = new IndexRequest("posts").id(String.valueOf(post.getPostId())); String json = JSON.toJSONString(post); request.source(json, XContentType.JSON); client.index(request, RequestOptions.DEFAULT); }
-
批量添加文档
//批量插入文档 @Test void addAll() throws IOException { //构建batch BulkRequest bulk = new BulkRequest(); List<Post> posts = postMapper.selectList(null); for (Post post : posts) { String json = JSON.toJSONString(post); IndexRequest request = new IndexRequest("posts").id(post.getPostId() + ""); request.source(json, XContentType.JSON); bulk.add(request); } client.bulk(bulk, RequestOptions.DEFAULT); }
三、查询操作
-
普通查询
@Test void get() throws IOException { GetRequest request = new GetRequest("posts"); request.id(120 + ""); GetResponse response = client.get(request, RequestOptions.DEFAULT); System.out.println(response.getSourceAsString()); Map<String, Object> map = response.getSourceAsMap(); map.forEach((k, v) -> { System.out.println(k + "---" + v); }); }
-
条件查询
//根据条件查询 @Test void getCondition() throws IOException { //构建查询请求 SearchRequest request = new SearchRequest("posts"); //查询对象构建 SearchSourceBuilder builder=new SearchSourceBuilder(); builder.query(QueryBuilders.matchQuery("postContent","狂飙")); request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); //获取命中对象 SearchHits hits = response.getHits(); for (SearchHit hit : hits) { System.out.println(hit.getSourceAsString()); } }
-
分页、排序查询
@Test public void pageSearch() throws Exception{ //构建查询对象 SearchRequest request=new SearchRequest("posts"); //构建查询对象 SearchSourceBuilder builder=new SearchSourceBuilder(); builder.query(QueryBuilders.matchQuery("postContent","狂飙")); String[] exlude={"postContent"};//排除查询字段 String[] include={};//包含查询字段 builder.fetchSource(include,exlude); builder.sort("postUserId", SortOrder.ASC);//排序 builder.from(0).size(5);//分页 request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); SearchHits hits = response.getHits(); System.out.println("共查询到:"+hits.getTotalHits()+"条"); for (SearchHit hit : hits) { System.out.println(hit.getSourceAsString()); } }
-
范围查询
@Test public void searchRange() throws IOException { SearchRequest request=new SearchRequest("posts"); SearchSourceBuilder builder=new SearchSourceBuilder(); //构建范围查询对象 RangeQueryBuilder queryBuilder = QueryBuilders.rangeQuery("postTagId"); //大于等于 queryBuilder.gte(1); //小于等于 queryBuilder.lte(10); builder.query(queryBuilder); request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); }
-
高亮查询
@Test public void searchHilight() throws Exception{ SearchRequest request=new SearchRequest("posts"); SearchSourceBuilder builder=new SearchSourceBuilder(); TermsQueryBuilder query = QueryBuilders.termsQuery("postTitle", "狂飙"); HighlightBuilder highBuilder=new HighlightBuilder(); highBuilder.preTags("<font color='res'>")//前缀 .postTags("</font>")//后缀 .field("postTitle");//映射字段 builder.highlighter(highBuilder); builder.query(query); request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); }