es7 使用RestHighLevelClient调用增删改查
@Autowired private RestHighLevelClient restHighLevelClient; public void findById(String id) throws IOException { GetRequest request = new GetRequest("indexName", id); GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT); String source = response.getSourceAsString(); } public void update(String id) throws IOException { GetRequest request = new GetRequest("indexName", id); boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT); String data = "{'username','张三','job':'键盘侠'}"; if(exists){ // 更新 UpdateRequest updateRequest = new UpdateRequest("indexName", id); updateRequest.doc(data, XContentType.JSON); restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT); }else { // 添加 IndexRequest addRequest = new IndexRequest("indexName"); addRequest.id(id); addRequest.source(data, XContentType.JSON); restHighLevelClient.index(addRequest,RequestOptions.DEFAULT); } } public boolean deleteById(String id) throws IOException { DeleteRequest deleteRequest = new DeleteRequest("indexName", id); DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT); return true; } public List<Object> searchByKeywords(String keywords) throws IOException { SearchRequest searchRequest = new SearchRequest("indexName"); // 用于构建查询条件 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(keywords, "username", "job"); searchSourceBuilder.query(multiMatchQueryBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); SearchHit[] searchHits = searchResponse.getHits().getHits(); List<Object> result = new ArrayList<>(); for (SearchHit searchHit : searchHits) { String source = searchHit.getSourceAsString(); Object object = JSONObject.parseObject(source, Object.class); result.add(object); } return result; } public Map<String, Object> searchByPage(String keywords, Integer pageNum, Integer pageSize) throws IOException { SearchRequest searchRequest = new SearchRequest("indexName"); // 用于构建查询条件 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(keywords, "username", "job"); searchSourceBuilder.query(multiMatchQueryBuilder); // 分页 searchSourceBuilder.size(pageSize); searchSourceBuilder.from((pageNum - 1) * pageSize); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); SearchHit[] searchHits = searchResponse.getHits().getHits(); List<Object> list = new ArrayList<>(); for (SearchHit searchHit : searchHits) { String source = searchHit.getSourceAsString(); Object object = JSONObject.parseObject(source, Object.class); list.add(object); } long total = searchResponse.getHits().getTotalHits().value; Map<String,Object> result = new HashMap<>(); result.put("total", total); result.put("content", list); return result; } public Map<String, Object> searchByScrollPage(String keywords, String scrollId, Integer pageNum, Integer pageSize) throws IOException { SearchResponse searchResponse = null; if(ObjectUtil.isEmpty(scrollId)){ SearchRequest searchRequest = new SearchRequest("indexName"); // 用于构建查询条件 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(keywords, "username"); searchSourceBuilder.query(multiMatchQueryBuilder); // 分页 searchSourceBuilder.size(pageSize); searchSourceBuilder.from((pageNum - 1) * pageSize); // 设置高亮 HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.field("username"); highlightBuilder.preTags("<font color='red'>"); highlightBuilder.postTags("</font>"); searchSourceBuilder.highlighter(highlightBuilder); searchRequest.source(searchSourceBuilder); // 设置scroll 值 searchRequest.scroll(TimeValue.timeValueMinutes(5)); searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); }else { SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId); scrollRequest.scroll(TimeValue.timeValueMinutes(5)); searchResponse = restHighLevelClient.scroll(scrollRequest, RequestOptions.DEFAULT); } SearchHit[] searchHits = searchResponse.getHits().getHits(); List<Object> list = new ArrayList<>(); for (SearchHit searchHit : searchHits) { String source = searchHit.getSourceAsString(); Object object = JSONObject.parseObject(source, Object.class); // 高亮 Map<String, HighlightField> highlightFields = searchHit.getHighlightFields(); HighlightField username = highlightFields.get("username"); if(username != null){ // 获取指定字段个高亮部门 Text[] fragments = username.getFragments(); // 将高亮部门拼接成一个完整的高亮片段 StringBuilder sb = new StringBuilder(); for (Text fragment : fragments) { sb.append(fragment); } sb.toString();// 高亮部分 } list.add(object); } long total = searchResponse.getHits().getTotalHits().value; Map<String,Object> result = new HashMap<>(); result.put("scrollId", searchResponse.getScrollId()); result.put("total", total); result.put("content", list); return result; }