网络知识 娱乐 springboot整合elasticsearch的增删查改

springboot整合elasticsearch的增删查改

1.maven导入pom.xml依赖


<dependency>n <groupId>org.elasticsearch</groupId>n <artifactId>elasticsearch</artifactId>n <version>7.8.0</version>n </dependency>n <!-- elasticsearch 的客户端 -->n <dependency>n <groupId>org.elasticsearch.client</groupId>n <artifactId>elasticsearch-rest-high-level-client</artifactId>n <version>7.8.0</version>n </dependency>


2.es客户端连接配置类


@Configurationnpublic class EsRestHighLevelClient {nnn @Beann public RestHighLevelClient restHighLevelClient() {n RestHighLevelClient client = new RestHighLevelClient(n RestClient.builder(new HttpHost("localhost", 9200, "http"))n );n return client;n }n}


3.基本操作

nnimport com.alibaba.fastjson2.JSONObject;nimport com.lxy.bms.domain.User;nimport com.lxy.bms.es.EsRestHighLevelClient;nimport org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;nimport org.elasticsearch.action.bulk.BulkRequest;nimport org.elasticsearch.action.bulk.BulkResponse;nimport org.elasticsearch.action.delete.DeleteRequest;nimport org.elasticsearch.action.delete.DeleteResponse;nimport org.elasticsearch.action.get.GetRequest;nimport org.elasticsearch.action.get.GetResponse;nimport org.elasticsearch.action.index.IndexRequest;nimport org.elasticsearch.action.index.IndexResponse;nimport org.elasticsearch.action.search.SearchRequest;nimport org.elasticsearch.action.search.SearchResponse;nimport org.elasticsearch.action.support.master.AcknowledgedResponse;nimport org.elasticsearch.action.update.UpdateRequest;nimport org.elasticsearch.action.update.UpdateResponse;nimport org.elasticsearch.client.RequestOptions;nimport org.elasticsearch.client.RestHighLevelClient;nimport org.elasticsearch.client.indices.CreateIndexRequest;nimport org.elasticsearch.client.indices.CreateIndexResponse;nimport org.elasticsearch.client.indices.GetIndexRequest;nimport org.elasticsearch.client.indices.GetIndexResponse;nimport org.elasticsearch.cluster.metadata.AliasMetadata;nimport org.elasticsearch.common.unit.Fuzziness;nimport org.elasticsearch.common.xcontent.XContentType;nimport org.elasticsearch.index.query.*;nimport org.elasticsearch.search.SearchHit;nimport org.elasticsearch.search.SearchHits;nimport org.elasticsearch.search.aggregations.AggregationBuilder;nimport org.elasticsearch.search.aggregations.AggregationBuilders;nimport org.elasticsearch.search.builder.SearchSourceBuilder;nimport org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;nimport org.junit.jupiter.api.Test;nimport org.springframework.beans.factory.annotation.Autowired;nimport org.springframework.boot.test.context.SpringBootTest;nnimport javax.naming.directory.SearchResult;nimport java.io.IOException;nimport java.util.ArrayList;nimport java.util.List;nimport java.util.Map;nn@SpringBootTestnclass BmsApplicationTests {nn @Autowiredn private RestHighLevelClient restHighLevelClient;nn /**n * 创建索引n *n * @throws IOExceptionn */n @Testn void insertIndex() throws IOException {n CreateIndexRequest request = new CreateIndexRequest("user");n CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);n //响应状态n boolean acknowledged = createIndexResponse.isAcknowledged();n System.out.println("创建索引操作:" + acknowledged);n restHighLevelClient.close();n }nn /**n * 查询索引n *n * @throws IOExceptionn */n @Testn void getIndex() throws IOException {n GetIndexRequest request = new GetIndexRequest("user_index");n GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);n System.out.println(getIndexResponse.getAliases());n System.out.println(getIndexResponse.getMappings());n System.out.println(getIndexResponse.getSettings());n restHighLevelClient.close();n }nn /**n * 删除索引n *n * @throws IOExceptionn */n @Testn void deleteIndex() throws IOException {n DeleteIndexRequest request = new DeleteIndexRequest("user_index");n AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);n boolean acknowledged = delete.isAcknowledged();n System.out.println("删除索引操作:" + acknowledged);n restHighLevelClient.close();n }nn /**n * 创建文档n *n * @throws IOExceptionn */n @Testn void insertIndexDoc() throws IOException {n IndexRequest request = new IndexRequest();n request.index("user").id("1001");nn User user = new User();n user.setUsername("张三");n user.setAge(30);n user.setSex("男");n String userJson = JSONObject.toJSONString(user);n request.source(userJson, XContentType.JSON);n IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);n System.out.println(response.getResult());n restHighLevelClient.close();n }nn /**n * 修改文档n *n * @throws IOExceptionn */n @Testn void updateIndexDoc() throws IOException {n UpdateRequest request = new UpdateRequest();n request.index("user").id("1001");n User user = new User();n user.setUsername("李四");n user.setAge(50);n user.setSex("女");n String userJson = JSONObject.toJSONString(user);n request.doc(userJson, XContentType.JSON);n UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);n System.out.println(response.getResult());n restHighLevelClient.close();n }nn /**n * 查看文档n *n * @throws IOExceptionn */n @Testn void getIndexDoc() throws IOException {n GetRequest request = new GetRequest();n request.index("user").id("1001");n GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);n System.out.println(response.getSourceAsString());n restHighLevelClient.close();n }nn /**n * 删除文档n *n * @throws IOExceptionn */n @Testn void deleteIndexDoc() throws IOException {n DeleteRequest request = new DeleteRequest();n request.index("user").id("1001");n DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n restHighLevelClient.close();n }nn /**n * 批量添加文档n * @throws IOExceptionn */n @Testn void batchInsertIndexDoc() throws IOException {n BulkRequest request=new BulkRequest();n //设置多长时间导入一次n request.timeout ("10s");n List<User> list=new ArrayList<>();n list.add(new User("zhangsan",20,"男"));n list.add(new User("lisi",30,"男"));n list.add(new User("wangwu",40,"男"));n for (int i = 0; i < list.size(); i++) {n request.add(new IndexRequest().index("user").id((10010+i)+"").source(JSONObject.toJSONString(list.get(i)),XContentType.JSON));n }n BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n System.out.println(response.getTook());n System.out.println(response.getItems());n restHighLevelClient.close();n }nn /**n * 批量删除文档n * @throws IOExceptionn */n @Testn void batchDeleteIndexDoc() throws IOException {n BulkRequest request=new BulkRequest();n //设置多长时间导入一次n request.timeout ("10s");n List<User> list=new ArrayList<>();n list.add(new User("zhangsan",20,"男"));n list.add(new User("lisi",30,"男"));n list.add(new User("wangwu",40,"男"));n for (int i = 0; i < list.size(); i++) {n request.add(new DeleteRequest().index("user").id((10010+i)+""));n }n BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n //took 值告诉我们执行整个搜索请求耗费了多少毫秒。n System.out.println(response.getTook());n System.out.println(response.getItems());n restHighLevelClient.close();n }nn /**n * 查询索引下的全部文档n * @throws IOExceptionn */n @Testn void allQuery() throws IOException {n SearchRequest request=new SearchRequest();n request.indices("user");n request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }nn /**n * 条件查询n * @throws IOExceptionn */n @Testn void termQuery() throws IOException {n SearchRequest request=new SearchRequest();n request.indices("user");n request.source(new SearchSourceBuilder().query(QueryBuilders.termsQuery("age","40")));n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }nn /**n * 分页查询n * @throws IOExceptionn */n @Testn void pagingQuery() throws IOException {n SearchRequest request=new SearchRequest();n request.indices("user");n SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());n //从第【(当前页码-1)*每页显示数据条数】开始查询n builder.from(0);n //每页查询多少条数据n builder.size(3);n request.source(builder);n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }nn /**n * 条件查询n * @throws IOExceptionn */n @Testn void fieldQuery() throws IOException {n SearchRequest request=new SearchRequest();n request.indices("user");n SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());n String[] excludes={};n String[] includes={"username"};n builder.fetchSource(includes,excludes);n request.source(builder);n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }nn /**n * 组合查询n * @throws IOExceptionn */n @Testn void boolQuery() throws IOException {n SearchRequest request=new SearchRequest();n request.indices("user");n SearchSourceBuilder builder = new SearchSourceBuilder();n BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();n //must是且 should是或n boolQueryBuilder.must(QueryBuilders.matchQuery("age",30));n boolQueryBuilder.must(QueryBuilders.matchQuery("sex","男"));n builder.query(boolQueryBuilder);n request.source(builder);n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }nn /**n * 范围查询n * @throws IOExceptionn */n @Testn void rangeQuery() throws IOException {n SearchRequest request=new SearchRequest();n request.indices("user");n SearchSourceBuilder builder = new SearchSourceBuilder();n RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");n rangeQuery.gte(30);n rangeQuery.lt(50);n builder.query(rangeQuery);n request.source(builder);n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }nn /**n * 模糊查询n * @throws IOExceptionn */n @Testn void fuzzyQuery() throws IOException {n SearchRequest request=new SearchRequest();n request.indices("user");n SearchSourceBuilder builder = new SearchSourceBuilder();n //Fuzziness.ONE代表查询相差一个字符的,wangwuw和wangw都会找到wangwun FuzzyQueryBuilder fuzziness = QueryBuilders.fuzzyQuery("username", "wangwuw").fuzziness(Fuzziness.ONE);n builder.query(fuzziness);n request.source(builder);n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }nn /**n * 高亮查询n * @throws IOExceptionn */n @Testn void highLightQuery() throws IOException {n SearchRequest request=new SearchRequest();n request.indices("user");n SearchSourceBuilder builder = new SearchSourceBuilder();n TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("username", "zhangsan");n HighlightBuilder highlightBuilder=new HighlightBuilder();n highlightBuilder.preTags("<font color='red'>");n highlightBuilder.postTags("</font>");n highlightBuilder.field("username");n builder.highlighter(highlightBuilder);n builder.query(termsQueryBuilder);n request.source(builder);n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }nn /**n * 最大值查询n * @throws IOExceptionn */n @Testn void maxQuery() throws IOException{n SearchRequest request=new SearchRequest();n request.indices("user");n SearchSourceBuilder builder = new SearchSourceBuilder();n AggregationBuilder aggregationBuilder= AggregationBuilders.max("maxAge").field("age");n builder.aggregation(aggregationBuilder);n request.source(builder);n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }nn /**n * 分组查询n * @throws IOExceptionn */n @Testn void groupQuery() throws IOException{n SearchRequest request=new SearchRequest();n request.indices("user");n SearchSourceBuilder builder = new SearchSourceBuilder();n AggregationBuilder aggregationBuilder= AggregationBuilders.terms("ageGroup").field("age");n builder.aggregation(aggregationBuilder);n request.source(builder);n SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);n System.out.println(response.toString());n SearchHits hits = response.getHits();n System.out.println(hits.getTotalHits());n System.out.println(response.getTook());n for(SearchHit hit:hits){n System.out.println(hit.getSourceAsString());n }n restHighLevelClient.close();n }n}n