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) ; }
}