基于springboot:
user:
@Data //getset @AllArgsConstructor //有参构造函数 @NoArgsConstructor //无参构造函数 @Component //声明它是spring的一个组件 public class User { private String name; private int age; }
测试添加文档:
@Test void testAddDocument() throws IOException { //创建对象 User user = new User("ElasticSearch", 3); //创建请求 IndexRequest request = new IndexRequest("index1"); //规则 request.id("1"); request.timeout(TimeValue.timeValueSeconds(1)); //将数据放入请求 request.source(JSON.toJSONString(user), XContentType.JSON); //客户端发送请求 IndexResponse index = client.index(request, RequestOptions.DEFAULT); System.out.println(index.toString()); }
结果:
测试文档是否存在
@Test void testIsExists() throws IOException { GetRequest request = new GetRequest("index1", "1"); //不获取 _source 上下文 request.fetchSourceContext(new FetchSourceContext(false)); boolean exists = client.exists(request, RequestOptions.DEFAULT); System.out.println(exists); }
结果:
获取文档内容
/*获取文档内容*/ @Test void testGetDocument() throws IOException { GetRequest request = new GetRequest("index1", "1"); GetResponse getResponse = client.get(request, RequestOptions.DEFAULT); System.out.println(getResponse.getSourceAsString());//打印文档内容 System.out.println(getResponse); }
结果 :
更新文档内容:
@Test void testUpdateRequest() throws IOException { UpdateRequest request = new UpdateRequest("index1", "1"); request.timeout("1s"); User user = new User("ElasticSearch学习", 18); request.doc(JSON.toJSONString(user),XContentType.JSON); UpdateResponse response = client.update(request, RequestOptions.DEFAULT); System.out.println(response.status()); }
结果:
删除文档内容
/*删除文档内容*/ @Test void testDeleteRequest() throws IOException { DeleteRequest deleteRequest = new DeleteRequest("index1", "1"); deleteRequest.timeout("1s"); DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT); System.out.println(deleteResponse.status()); }
结果:
批量插入:
/*批量插入*/ @Test void testBulkRequest() throws IOException { BulkRequest bulkRequest = new BulkRequest(); bulkRequest.timeout("10s"); ArrayList<Object> arrayList = new ArrayList<>(); arrayList.add(new User("张三",12)); arrayList.add(new User("李四",15)); arrayList.add(new User("王五",22)); arrayList.add(new User("赵七",26)); arrayList.add(new User("王八",31)); arrayList.add(new User("擎九",20)); for (int i = 0; i <arrayList.size() ; i++) { bulkRequest.add( new IndexRequest("index1") .id(""+(i+1)) //id可要可不要 //转json数据 .source(JSON.toJSONString(arrayList.get(i)),XContentType.JSON)); } BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT); System.out.println(bulk.hasFailures());//是否失败 }
结果:
精确条件查询
//精确条件查询 @Test void testSearch() throws IOException { SearchRequest searchRequest = new SearchRequest("index1"); //构建搜索条件 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); //条件查询 如果查询条件为中文 需要在属性添加 .keyword 例如: QueryBuilders.termQuery("name.keyword","张三"); TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name.keyword","张三"); //查询所有 MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery(); // 分页 /*一页多少条*/ sourceBuilder.size(20); /*从第几个开始*/ sourceBuilder.from(0); sourceBuilder.query(termQueryBuilder); // sourceBuilder.query();查询所有 //设置查询时间 如果过了60s将不再查询 sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchRequest.source(sourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); System.out.println(JSON.toJSONString(searchResponse.getHits())); System.out.println("+++++++++++++"); for (SearchHit documentFields : searchResponse.getHits().getHits()) { System.out.println(documentFields.getSourceAsMap()); } }
结果:
模糊查询
//模糊查询 @Test void testFuzzyQuery() throws IOException{ SearchRequest searchRequest = new SearchRequest("index1"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchQuery("name","张")); searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchRequest.source(searchSourceBuilder); SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); System.out.println(response.getHits()); for (SearchHit searchHit : response.getHits().getHits()) { System.out.println(searchHit.getSourceAsMap()); } }
结果:
高亮搜索:
//高亮搜索 @Test void testHighlightSearch() throws IOException { //搜索条件 SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder .query(QueryBuilders.matchQuery("name.keyword","张三")) //精确匹配 .timeout(new TimeValue(60, TimeUnit.SECONDS)) .highlighter(new HighlightBuilder() .field("name.keyword") //搜索字段 .requireFieldMatch(false) // 只需一个高亮 .preTags("<span style='coler:red'>") .postTags("</span>")); //执行搜索 searchRequest.source(searchSourceBuilder); SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT); //解析结果 List<Object> queryList = new LinkedList<>(); for (SearchHit documentFields : search.getHits().getHits()) { Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();//原来的结果 HighlightField field = documentFields.getHighlightFields().get("name.keyword"); //解析高亮的字段,将原来的字段替换成高亮字段 Text[] texts = field.fragments(); String n_text =""; for (Text text : texts) { n_text+= text; } sourceAsMap.put("name",n_text);//高亮字段替换原来的内容 queryList.add(sourceAsMap); } queryList.forEach((a)-> System.out.println(a)); }
结果: