# 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) {}
}
```