# Elastic App Search 後端連接 Elastic App Search 後端連接有兩種方式,一種是透過ELK的Elastic 去取得 Elastic App 的資料,第二種是直接用Java 打API的方式,去取得 Elastic App Search 的資料 --- ## 一、透過ELK查詢 Elastic App Search 1. 取得Elastic App Search 的 index,可以從Kibana取得所有的Elastic 列表,GET `_cat/indices?v&index=*engine*` 2. 回傳的結果 | health | status | index | uuid | pri | rep | docs.count | docs.deleted | store.size | pri.store.size | | -------- | -------- | -------- |-------- |-------- |-------- |-------- |-------- |-------- |-------- | |green|open|.ent-search-engine-documents-hktv|N3UnO9mkRYS94RJnxUi23w|2|1|100|0|1.9mb|993.9kb| 3. 會有多個 index,可以用docs.count 來判斷,Elastic App Search 的 index 4. 使用之前的遠端連結範例 [遠端連接](https://hackmd.io/@ElasticNote/rkx8e42H_) ```java= public static void main(String[] args ) throws IOException { // 建立連線端 這裡的是ELK的使用者名稱密碼與Host String username = "yourname"; String password = "yourpassword"; String host = "yourHost"; int port = 9243; int nextPort = 9244; String protocol = "https"; final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials( AuthScope.ANY, new UsernamePasswordCredentials(username, password)); RestClientBuilder Builder = RestClient.builder( new HttpHost(host, port, protocol), new HttpHost(host, nextPort, protocol)) .setHttpClientConfigCallback((h) -> h.setDefaultCredentialsProvider(credentialsProvider)); try (RestHighLevelClient client = new RestHighLevelClient(Builder)) { //搜尋的Key與一般搜尋ELK不同,可能會因版本差異而改變 QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name_zh$string", "貓砂").fuzziness(Fuzziness.AUTO);; SearchSourceBuilder searchBuilder = SearchSourceBuilder.searchSource().query(matchQueryBuilder).size(50); // index 的名稱 SearchRequest request = new SearchRequest(".yourIndex").source(searchBuilder); SearchHits hits = client.search(request, RequestOptions.DEFAULT).getHits(); // 逐筆取資料 for(SearchHit hit : hits) { Map<String, Object> sourceAsMap = hit.getSourceAsMap(); String name_zh = (String) sourceAsMap.get("name_zh$string"); String selling_price = (String) sourceAsMap.get("selling_price$string"); System.out.println(String.format("NameZH:%s selling_price:%s ",name_zh, selling_price)); } }catch (IOException ignored) {} } ```