ElasticSearch多源配置
阿新 • • 發佈:2022-04-08
直接上程式碼
yml檔案配置資訊
elasticsearch: works: #單篇稿件的ES庫配置資訊 node1: http://***.**.***.***:9201 #localhost:9200 node2: http://***.**.***.***:9202 node3: http://***.**.***.***:9203 connTimeout: 30000 # 連線超時時間 socketTimeout: 30000 # socket超時時間 connectionRequestTimeout: 30000 # 連結請求超時時間 index: spreadimpact #索引 maxConnectNum:100 #最大連線數 maxConnectPerRoute: 100 #最大路由連線數 yq: #全網資料的ES庫配置資訊 # es連線地址和埠 host: ***.***.***.*** # es埠 port: 9200 # 連線超時時間 connTimeout: 10000 # socket超時時間 socketTimeout: 10000 # 連結請求超時時間 connectionRequestTimeout: 20000 # 索引 index: nday_test
1.SystemConfiguration類
@Slf4j @Configuration @Getter public class SystemConfiguration { @Value("${elasticsearch.works.node1}") private String node1; @Value("${elasticsearch.works.node2}") private String node2; @Value("${elasticsearch.works.node3}") private String node3; @Value("${elasticsearch.works.connTimeout}") private int connTimeout; @Value("${elasticsearch.works.socketTimeout}") private int socketTimeout; @Value("${elasticsearch.works.connectionRequestTimeout}") private int connectionRequestTimeout; /**最大連線數*/ @Value("${elasticsearch.works.maxConnectNum}") private int maxConnectNum; /** 最大路由連線數 */ @Value("${elasticsearch.works.maxConnectPerRoute}") private int maxConnectPerRoute; /** *下面是專題活動ES庫的配置資訊 */ @Value("${elasticsearch.yq.host}") private String host; @Value("${elasticsearch.yq.port}") private int port; @Value("${elasticsearch.yq.connTimeout}") private int connectTimeOut; @Value("${elasticsearch.yq.socketTimeout}") private int socketTimeOut; @Value("${elasticsearch.yq.connectionRequestTimeout}") private int connectionRequestTimeOut; }
2.SpringEsConfig類
@Slf4j @Configuration public class ElasticSearchConfiguration { @Autowired SystemConfiguration sysConfig; /** * * @return RestHighLevelClient */ @Bean(destroyMethod = "close", name = "client") public RestHighLevelClient initRestClient() { RestClientBuilder builder = RestClient.builder( HttpHost.create(sysConfig.getNode1()), HttpHost.create(sysConfig.getNode2()), HttpHost.create(sysConfig.getNode3())); builder.setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder .setConnectTimeout(sysConfig.getConnTimeout()) .setSocketTimeout(sysConfig.getSocketTimeout()) .setConnectionRequestTimeout(sysConfig.getConnectionRequestTimeout())); builder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setMaxConnTotal(sysConfig.getMaxConnectNum()) .setMaxConnPerRoute(sysConfig.getMaxConnectPerRoute())); return new RestHighLevelClient(builder); } /** * * @return RestHighLevelClient */ @Bean(destroyMethod = "close", name = "yq-client") public RestHighLevelClient initClient() { RestClientBuilder builder = RestClient.builder(new HttpHost(sysConfig.getHost(), sysConfig.getPort())) .setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder .setConnectTimeout(sysConfig.getConnectTimeOut()) .setSocketTimeout(sysConfig.getSocketTimeOut()) .setConnectionRequestTimeout(sysConfig.getConnectionRequestTimeout())); return new RestHighLevelClient(builder); }
3. ESHighClient注入使用
@Service public class CblWorksServiceImpl implements ICblWorksService { private final RestHighLevelClient restHighLevelClient; public CblWorksServiceImpl(@Qualifier("yq-client") RestHighLevelClient restHighLevelClient) { this.restHighLevelClient = restHighLevelClient; } //此處進行client的使用 @Override public AreaForwardOrderListVO getAreaForwardOrderList(String title) { //1.建立請求 SearchRequest searchRequest = new SearchRequest(index); //2.組合查詢條件 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("title", title)); //3.條件放入到request中 searchSourceBuilder.query(boolQueryBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = null; List<String> xxData = new ArrayList<>(); List<Integer> yyData = new ArrayList<>(); AreaForwardOrderListVO vo = new AreaForwardOrderListVO(); try { searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); if (searchResponse != null) { SearchHit[] searchHits = searchResponse.getHits().getHits(); //下面進行相關的資料處理 ... } } return vo;
} }