主页 > 人工智能  > 

Elasticsearch简单学习

Elasticsearch简单学习
1、依赖的导入 <!--ES依赖--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency> 2、客户端链接 RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200"))); 3、索引库的相关操作 1、索引库的创建 @Test void createTestIndex() throws IOException { /*创建索引库*/ //1.创建Request对象,索引库名称必须为小写字母 CreateIndexRequest request = new CreateIndexRequest("test_index"); String source = "{\n" + " \"mappings\":{\n" + " \"properties\":{\n" + " \"id\":{\n" + " \"type\":\"integer\"\n" + " },\n" + " \"name\":{\n" + " \"type\":\"text\",\n" + " \"analyzer\":\"ik_max_word\"\n" + " },\n" + " \"age\":{\n" + " \"type\":\"integer\"\n" + " },\n" + " \"sex\":{\n" + " \"type\":\"keyword\"\n" + " },\n" + " \"bossId\":{\n" + " \"type\":\"integer\"\n" + " },\n" + " \"departmentId\":{\n" + " \"type\":\"integer\"\n" + " }\n" + " }\n" + " }\n" + "}"; //2.准备请求的参数:DSL语句 request.source(source, XContentType.JSON); //3.发请求 client.indices().create(request, RequestOptions.DEFAULT); } 2、判断索引库是否存在 @Test void existsTestIndex() throws IOException { /*判断索引库是否存在*/ //1.创建Request对象,名称必须为小写字母 GetIndexRequest request = new GetIndexRequest("test_index"); //2.发请求 boolean is = client.indices().exists(request, RequestOptions.DEFAULT); System.out.println(is); } 3、删除索引库 @Test void deleteTestIndex() throws IOException { /*删除索引库*/ //1.创建Request对象,名称必须为小写字母 DeleteIndexRequest request = new DeleteIndexRequest("test_index"); //2.发请求 client.indices().delete(request, RequestOptions.DEFAULT); } 4、文档的操作 1、创建文档 @Test void createDocTest() throws IOException { //从数据库中获取数据对象 Employee employee = employeeMapper.selectAllById(1); //1. 创建Request对象 IndexRequest request = new IndexRequest("test_index").id(employee.getId().toString()); //2.准备json文档 String source = JSON.toJSONString(employee); //2.1准备json文档 request.source(source, XContentType.JSON); //3.发请求 client.index(request, RequestOptions.DEFAULT); } 2、获取指定的文档 @Test void getDocTest() throws IOException { //1.创建Request对象 GetRequest request = new GetRequest("test_index","1"); //2.发请求,得到结果 GetResponse response = client.get(request, RequestOptions.DEFAULT); //3.解析结果 String json = response.getSourceAsString(); System.out.println(json); Employee employee = JSON.parseObject(json, Employee.class); System.out.println(employee); } 3、更新文档 @Test void updateDocTest() throws IOException { //1.创建Request对象 UpdateRequest request = new UpdateRequest("test_index","1"); //2.准备DSL语句 request.doc( "age",18 ); //3.发请求 client.update(request,RequestOptions.DEFAULT); } 4、删除文档 @Test void deleteDocTest() throws IOException { //1.创建Request对象 DeleteRequest request = new DeleteRequest("test_index","1"); //2.发请求 client.delete(request,RequestOptions.DEFAULT); } 5、批量操作(创建) @Test void batchCreateDocTest() throws IOException { //1.创建Request对象 BulkRequest request = new BulkRequest(); //2.准备DSL语句,批量增加文档 List<Employee> employees = employeeMapper.selectAll(); for(Employee e : employees){ request.add(new IndexRequest("test_index") .id(e.getId().toString()) .source(JSON.toJSONString(e),XContentType.JSON)); } //3.发请求 client.bulk(request,RequestOptions.DEFAULT); } 5、搜索文档 1、分词查询-查询全部 @Test void matchAllTest() throws IOException { //分词查询 //1.准备Request SearchRequest request = new SearchRequest("test_index"); //2.组织DSL参数 request.source() // 查询全部 .query(QueryBuilders.matchAllQuery()); //3.发送请求 SearchResponse response = client.search(request,RequestOptions.DEFAULT); //4.解析结果 SearchHits searchHits = response.getHits(); //4.1获取总条数 long total = searchHits.getTotalHits().value; System.out.println("总共有:" + total + "条数据"); //4.2获取文档数组 SearchHit[] hits = searchHits.getHits(); //4.3遍历数组 for(SearchHit h : hits){ String json = h.getSourceAsString(); Employee employee = JSON.parseObject(json, Employee.class); System.out.println(employee); } } 2、分词查询-指定字段 @Test void matchQueryTest() throws IOException { //分词查询 //1.准备Request SearchRequest request = new SearchRequest("test_index"); //2.组织DSL参数 request.source() //查询指定字段的值,也可以指定多个字段 .multiMatchQuery() .query(QueryBuilders.matchQuery("name","晨")); //3.发送请求 SearchResponse response = client.search(request,RequestOptions.DEFAULT); //4.解析结果 SearchHits searchHits = response.getHits(); //4.1获取总条数 long total = searchHits.getTotalHits().value; System.out.println("总共有:" + total + "条数据"); //4.2获取文档数组 SearchHit[] hits = searchHits.getHits(); //4.3遍历数组 for(SearchHit h : hits){ String json = h.getSourceAsString(); Employee employee = JSON.parseObject(json, Employee.class); System.out.println(employee); } } 3、精确查询 @Test void termQueryTest() throws IOException { //精确查询 //1.准备Request SearchRequest request = new SearchRequest("test_index"); //2.组织DSL参数 request.source() //精确查询只能查询 非text(分词字段),如果查询分词字段,则自动采用模糊分词查询 .query(QueryBuilders.termQuery("age","33")); //3.发送请求 SearchResponse response = client.search(request,RequestOptions.DEFAULT); //4.解析结果 SearchHits searchHits = response.getHits(); //4.1获取总条数 long total = searchHits.getTotalHits().value; System.out.println("总共有:" + total + "条数据"); //4.2获取文档数组 SearchHit[] hits = searchHits.getHits(); //4.3遍历数组 for(SearchHit h : hits){ String json = h.getSourceAsString(); Employee employee = JSON.parseObject(json, Employee.class); System.out.println(employee); } } 4、范围查询 @Test void rangeQueryTest() throws IOException { //范围查询 //1.准备Request SearchRequest request = new SearchRequest("test_index"); //2.组织DSL参数 request.source() //范围查询,gte:大于等于,lte:小于等于,gt:大于,lt:小于 .query(QueryBuilders.rangeQuery("age").gte(30).lte(35)); //3.发送请求 SearchResponse response = client.search(request,RequestOptions.DEFAULT); //4.解析结果 SearchHits searchHits = response.getHits(); //4.1获取总条数 long total = searchHits.getTotalHits().value; System.out.println("总共有:" + total + "条数据"); //4.2获取文档数组 SearchHit[] hits = searchHits.getHits(); //4.3遍历数组 for(SearchHit h : hits){ String json = h.getSourceAsString(); Employee employee = JSON.parseObject(json, Employee.class); System.out.println(employee); } } 5、复合查询 @Test void boolQueryTest() throws IOException { //复合查询 //1.准备Request SearchRequest request = new SearchRequest("test_index"); //2.1创建复合查询对象 BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); //2.2添加查询条件 boolQuery.must(QueryBuilders.matchQuery("name","雨")); boolQuery.filter(QueryBuilders.rangeQuery("age").gte(20).lte(35)); //2.3组织DSL参数 request.source() .query(boolQuery); //3.发送请求 SearchResponse response = client.search(request,RequestOptions.DEFAULT); //4.解析结果 SearchHits searchHits = response.getHits(); //4.1获取总条数 long total = searchHits.getTotalHits().value; System.out.println("总共有:" + total + "条数据"); //4.2获取文档数组 SearchHit[] hits = searchHits.getHits(); //4.3遍历数组 for(SearchHit h : hits){ String json = h.getSourceAsString(); Employee employee = JSON.parseObject(json, Employee.class); System.out.println(employee); } } 6、分页排序查询 @Test void pageSortQueryTest() throws IOException { //分页、排序查询 // 页码,每页大小 int page = 3,size = 10; //1.准备Request SearchRequest request = new SearchRequest("test_index"); //2组织DSL参数 request.source() .from((page-1)*size) // 包含form,(page-1)*size,是前端传过来的页码和每页条数 .size(size) .sort("id", SortOrder.ASC) .query(QueryBuilders.matchAllQuery()); //3.发送请求 SearchResponse response = client.search(request,RequestOptions.DEFAULT); //4.解析结果 SearchHits searchHits = response.getHits(); //4.1获取总条数 long total = searchHits.getTotalHits().value; System.out.println("总共有:" + total + "条数据"); //4.2获取文档数组 SearchHit[] hits = searchHits.getHits(); //4.3遍历数组 for(SearchHit h : hits){ String json = h.getSourceAsString(); Employee employee = JSON.parseObject(json, Employee.class); System.out.println(employee); } } 6、高亮查询 @Test void highLightQueryTest() throws IOException { //高亮查询 //1.准备Request SearchRequest request = new SearchRequest("test_index"); //2组织DSL参数 request.source() .highlighter(new HighlightBuilder() //高亮显示 .field("name") //字段名 .requireFieldMatch(false) // 是否与查询字段匹配 ) // 用的默认标签 <em></em> .query(QueryBuilders.matchQuery("name","晨")); //3.发送请求 SearchResponse response = client.search(request,RequestOptions.DEFAULT); //4.解析结果 SearchHits searchHits = response.getHits(); //4.1获取总条数 long total = searchHits.getTotalHits().value; System.out.println("总共有:" + total + "条数据"); //4.2获取文档数组 SearchHit[] hits = searchHits.getHits(); //4.3遍历数组 for(SearchHit h : hits){ String json = h.getSourceAsString(); Employee employee = JSON.parseObject(json, Employee.class); // 高亮显示,因为每条数据都是带有 晨 的,所以每条数据都有一个HighlightField用于替换 HighlightField name = h.getHighlightFields().get("name"); //替换 employee.setName(name.getFragments()[0].toString()); System.out.println(employee); } }
标签:

Elasticsearch简单学习由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Elasticsearch简单学习