依赖
< dependency>
< groupId> org.elasticsearch.client</ groupId>
< artifactId> elasticsearch-rest-high-level-client</ artifactId>
</ dependency>
配置文件
es :
ip : 172.23.4.130
port : 9200
user : elastic
password : qwertyuiop
读取配置文件类
@Component
@ConfigurationProperties ( prefix = "es" )
@Data
public class ElasticsearchProperties {
private String ip;
private int port;
private String user;
private String password;
}
配置类
@Configuration
@RequiredArgsConstructor
public class ElasticsearchConfig {
private final ElasticsearchProperties elasticsearchProperties;
@Bean
public RestHighLevelClient restHighLevelClient ( ) {
CredentialsProvider credentialsProvider = new BasicCredentialsProvider ( ) ;
credentialsProvider. setCredentials (
new AuthScope ( elasticsearchProperties. getIp ( ) , elasticsearchProperties. getPort ( ) ) ,
new UsernamePasswordCredentials ( elasticsearchProperties. getUser ( ) , elasticsearchProperties. getPassword ( ) )
) ;
RestClientBuilder builder = RestClient . builder ( new HttpHost ( elasticsearchProperties. getIp ( ) , elasticsearchProperties. getPort ( ) , "http" ) ) ;
builder. setHttpClientConfigCallback ( httpClientBuilder -> {
return httpClientBuilder. setDefaultCredentialsProvider ( credentialsProvider) ;
} ) ;
return new RestHighLevelClient ( builder) ;
}
}
格式化工具
public class EsUtils {
public static < T > List < T > toList ( SearchHit [ ] hits, Class < T > clazz) {
List < T > retList = new ArrayList < > ( ) ;
for ( SearchHit item : hits) {
String json = item. getSourceAsString ( ) ;
T obj = JSONUtil . toBean ( json, clazz) ;
retList. add ( obj) ;
}
return retList;
}
}
Controller
private final IGoodsService iGoodsService;
@GetMapping ( "/list" )
public R list ( ) {
SearchHits hit = iGoodsService. listPage ( getPage ( ) ) ;
List < Goods > list = EsUtils . toList ( hit. getHits ( ) , Goods . class ) ;
return R . page ( "获取成功" , list, hit. getTotalHits ( ) . value) ;
}
Service
private final RestHighLevelClient client;
private final String GOODS_INDEX = "goods" ;
@SneakyThrows
@Override
public SearchHits listPage ( PageData p) {
int page= ( p. getPageNum ( ) - 1 ) * p. getPageSize ( ) ;
SearchRequest request = new SearchRequest ( GOODS_INDEX ) ;
request. source ( ) . query ( QueryBuilders . matchAllQuery ( ) ) ;
request. source ( ) . from ( page) . size ( p. getPageSize ( ) ) ;
SearchResponse response= client. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
return hits;
}