创建users实体
//引入lombok<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>//引入fastjson<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.70</version></dependency>
1. 添加文档
//添加文档@Testvoid testAddDocument() throws IOException {//1.创建对象User user = new User("狂神说", 23);//创建请求IndexRequest request = new IndexRequest("kuang_index");//规则 put /kuang_index/_doc/1request.id("1");request.timeout(TimeValue.timeValueSeconds(1));request.timeout("1s");//将我们的数据放入请求json//把对象转化为jsonrequest.source(JSON.toJSONString(user), XContentType.JSON);//客户端发送请求,获取响应的结构IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);System.out.println(index.toString());System.out.println(index.status());//对应我们命令返回的状态CREATED}
2.判断是否存在
//获取文档,先要判断是否存在@Testvoid testIsExists() throws IOException {GetRequest getRequest = new GetRequest("kuang_index", "1");//不获取返回的_source的上下文,这么做效率更高getRequest.fetchSourceContext(new FetchSourceContext(false));getRequest.storedFields("_none_");boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);System.out.println(exists);}
3.获取文档信息
//获取文档信息@Testvoid testGetDocument() throws IOException {GetRequest getRequest = new GetRequest("kuang_index", "1");GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);String sourceAsString = getResponse.getSourceAsString();System.out.println(sourceAsString);//打印文档到的内容}
4.更新文档信息
//修改文档信息@Testvoid updateDocument() throws IOException {UpdateRequest updateRequest = new UpdateRequest("kuang_index", "1");updateRequest.timeout("1s");User user=new User("狂神说java",18);updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);System.out.println(update.status()); //查看更新状态}
5.删除文档信息
//删除文档信息@Testvoid deleteDocument() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("kuang_index", "1");DeleteResponse delete = restHighLevelClient.delete(deleteRequest,RequestOptions.DEFAULT);System.out.println(delete.status()); //查看删除状态}
6.批量操作
//测试批量添加文档信息@Testvoid bulkDocument() throws IOException {//创建批量操作对象BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");ArrayList<User> list = new ArrayList<>();list.add(new User("张三1",12));list.add(new User("张三2",12));list.add(new User("张三3",12));list.add(new User("张三4",12));list.add(new User("张三5",12));for (int i=0;i<list.size();i++){bulkRequest.add(new IndexRequest("kuang_index").id(""+(i+1)).source(JSON.toJSONString(list.get(i)),XContentType.JSON));}//发送请求BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulk.hasFailures()); //查看状态,是否失败,返回false代表成功}
7.查询文档信息
//测试查询文档信息//SearchRequest 搜索请求//SearchSourceBuilder 条件构造//HighlightBuilder 构造高亮//TermQueryBuilder 精确查询//MatchQueryBuilder 匹配所有@Testvoid search() throws IOException {//创建请求对象SearchRequest searchRequest = new SearchRequest("kuang_index");//构造搜索条件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//使用工具类构造搜索信息//查询条件,我们可以使用QueryBuilders工具来实现//QueryBuilders.termQuery精确//QueryBuilders.matchQuery()匹配所有MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "张三1");searchSourceBuilder.query(matchQueryBuilder);searchRequest.source(searchSourceBuilder);//发送请求SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println(JSON.toJSONString(searchResponse.getHits())); //Hits对象就包含查询的各种信息System.out.println("--------------------------------------------------");for(SearchHit documentFields:searchResponse.getHits().getHits()){System.out.println(documentFields.getSourceAsMap());}

结果:
{"fragment":true,"hits":[{"fields":{},"fragment":false,"highlightFields":{},"id":"1","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":2.06728,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三1","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三1\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1},{"fields":{},"fragment":false,"highlightFields":{},"id":"2","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":0.49293762,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三2","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三2\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1},{"fields":{},"fragment":false,"highlightFields":{},"id":"3","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":0.49293762,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三3","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三3\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1},{"fields":{},"fragment":false,"highlightFields":{},"id":"4","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":0.49293762,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三4","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三4\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1},{"fields":{},"fragment":false,"highlightFields":{},"id":"5","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":0.49293762,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三5","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三5\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1}],"maxScore":2.06728,"totalHits":{"relation":"EQUAL_TO","value":5}}
Hits对象中包含的是所有的查询结果信息,我们可以通过遍历想要的参数获得具体的信息。
对于复杂查询的各种操作都可以在searchSourceBuilder对象的方法中找到对应的方法:



