1、依赖的导入
< 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 { 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" + "}" ; request. source ( source, XContentType . JSON ) ; client. indices ( ) . create ( request, RequestOptions . DEFAULT ) ;
}
2、判断索引库是否存在
@Test
void existsTestIndex ( ) throws IOException { GetIndexRequest request = new GetIndexRequest ( "test_index" ) ; boolean is = client. indices ( ) . exists ( request, RequestOptions . DEFAULT ) ; System . out. println ( is) ;
}
3、删除索引库
@Test
void deleteTestIndex ( ) throws IOException { DeleteIndexRequest request = new DeleteIndexRequest ( "test_index" ) ; client. indices ( ) . delete ( request, RequestOptions . DEFAULT ) ;
}
4、文档的操作
1、创建文档
@Test
void createDocTest ( ) throws IOException { Employee employee = employeeMapper. selectAllById ( 1 ) ; IndexRequest request = new IndexRequest ( "test_index" ) . id ( employee. getId ( ) . toString ( ) ) ; String source = JSON . toJSONString ( employee) ; request. source ( source, XContentType . JSON ) ; client. index ( request, RequestOptions . DEFAULT ) ;
}
2、获取指定的文档
@Test
void getDocTest ( ) throws IOException { GetRequest request = new GetRequest ( "test_index" , "1" ) ; GetResponse response = client. get ( request, RequestOptions . DEFAULT ) ; 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 { UpdateRequest request = new UpdateRequest ( "test_index" , "1" ) ; request. doc ( "age" , 18 ) ; client. update ( request, RequestOptions . DEFAULT ) ;
}
4、删除文档
@Test
void deleteDocTest ( ) throws IOException { DeleteRequest request = new DeleteRequest ( "test_index" , "1" ) ; client. delete ( request, RequestOptions . DEFAULT ) ;
}
5、批量操作(创建)
@Test
void batchCreateDocTest ( ) throws IOException { BulkRequest request = new BulkRequest ( ) ; 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 ) ) ; } client. bulk ( request, RequestOptions . DEFAULT ) ;
}
5、搜索文档
1、分词查询-查询全部
@Test
void matchAllTest ( ) throws IOException { SearchRequest request = new SearchRequest ( "test_index" ) ; request. source ( ) . query ( QueryBuilders . matchAllQuery ( ) ) ; SearchResponse response = client. search ( request, RequestOptions . DEFAULT ) ; SearchHits searchHits = response. getHits ( ) ; long total = searchHits. getTotalHits ( ) . value; System . out. println ( "总共有:" + total + "条数据" ) ; SearchHit [ ] hits = searchHits. getHits ( ) ; 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 { SearchRequest request = new SearchRequest ( "test_index" ) ; request. source ( ) . query ( QueryBuilders . matchQuery ( "name" , "晨" ) ) ; SearchResponse response = client. search ( request, RequestOptions . DEFAULT ) ; SearchHits searchHits = response. getHits ( ) ; long total = searchHits. getTotalHits ( ) . value; System . out. println ( "总共有:" + total + "条数据" ) ; SearchHit [ ] hits = searchHits. getHits ( ) ; 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 { SearchRequest request = new SearchRequest ( "test_index" ) ; request. source ( ) . query ( QueryBuilders . termQuery ( "age" , "33" ) ) ; SearchResponse response = client. search ( request, RequestOptions . DEFAULT ) ; SearchHits searchHits = response. getHits ( ) ; long total = searchHits. getTotalHits ( ) . value; System . out. println ( "总共有:" + total + "条数据" ) ; SearchHit [ ] hits = searchHits. getHits ( ) ; 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 { SearchRequest request = new SearchRequest ( "test_index" ) ; request. source ( ) . query ( QueryBuilders . rangeQuery ( "age" ) . gte ( 30 ) . lte ( 35 ) ) ; SearchResponse response = client. search ( request, RequestOptions . DEFAULT ) ; SearchHits searchHits = response. getHits ( ) ; long total = searchHits. getTotalHits ( ) . value; System . out. println ( "总共有:" + total + "条数据" ) ; SearchHit [ ] hits = searchHits. getHits ( ) ; 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 { SearchRequest request = new SearchRequest ( "test_index" ) ; BoolQueryBuilder boolQuery = QueryBuilders . boolQuery ( ) ; boolQuery. must ( QueryBuilders . matchQuery ( "name" , "雨" ) ) ; boolQuery. filter ( QueryBuilders . rangeQuery ( "age" ) . gte ( 20 ) . lte ( 35 ) ) ; request. source ( ) . query ( boolQuery) ; SearchResponse response = client. search ( request, RequestOptions . DEFAULT ) ; SearchHits searchHits = response. getHits ( ) ; long total = searchHits. getTotalHits ( ) . value; System . out. println ( "总共有:" + total + "条数据" ) ; SearchHit [ ] hits = searchHits. getHits ( ) ; 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 ; SearchRequest request = new SearchRequest ( "test_index" ) ; request. source ( ) . from ( ( page- 1 ) * size) . size ( size) . sort ( "id" , SortOrder . ASC ) . query ( QueryBuilders . matchAllQuery ( ) ) ; SearchResponse response = client. search ( request, RequestOptions . DEFAULT ) ; SearchHits searchHits = response. getHits ( ) ; long total = searchHits. getTotalHits ( ) . value; System . out. println ( "总共有:" + total + "条数据" ) ; SearchHit [ ] hits = searchHits. getHits ( ) ; 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 { SearchRequest request = new SearchRequest ( "test_index" ) ; request. source ( ) . highlighter ( new HighlightBuilder ( ) . field ( "name" ) . requireFieldMatch ( false ) ) . query ( QueryBuilders . matchQuery ( "name" , "晨" ) ) ; SearchResponse response = client. search ( request, RequestOptions . DEFAULT ) ; SearchHits searchHits = response. getHits ( ) ; long total = searchHits. getTotalHits ( ) . value; System . out. println ( "总共有:" + total + "条数据" ) ; SearchHit [ ] hits = searchHits. getHits ( ) ; for ( SearchHit h : hits) { String json = h. getSourceAsString ( ) ; Employee employee = JSON . parseObject ( json, Employee . class ) ; HighlightField name = h. getHighlightFields ( ) . get ( "name" ) ; employee. setName ( name. getFragments ( ) [ 0 ] . toString ( ) ) ; System . out. println ( employee) ; }
}