- JSON형식 그대로의 쿼리를 하고 싶어서 찾아보던 중 LowLevelClient는 JSON형식 그대로 쿼리가 가능하다는 것을 알고 공부하게 되었다.
- LowlevelClient 와 HighLevelClient Query 차이
String hostname ="10.10.~.~";
int port = 9200;
String scheme = "http";
HttpHost host = new HttpHost(hostname, port, scheme);
RestClientBuilder restClientBuilder = RestClient.builder(host);
//HighLevel Client
RestHighLevelClient client = new RestHighLevelClient(restClientBuilder);
//lowLevelClient
RestClient lowLevelClient = restClientBuilder.build();
//==========================LowLevelClient================================
public void LowlevelClientQuery(){
Map<String,String> params = Collections.emptyMap();
String query ="{\\"query\\": {\\n" +
" \\"match_all\\":{}\\n" +
" }\\n" +
"}";
try {
Request request = new Request("GET","/indexName/_search");
request.setJsonEntity(query);
Response response = lowLevelClient.performRequest(request);
InputStreamReader reader = new InputStreamReader(response.getEntity().getContent());
Stream<String> stream = new BufferedReader(reader).lines();
String streamToString = stream.collect(Collectors.joining());
JSONParser jsonParser = new JSONParser();
Object obj = jsonParser.parse(streamToString);
JSONObject jsonObject = (JSONObject) obj;
JSONObject getHits = (JSONObject) jsonObject.get("hits");
JSONArray hits = (JSONArray) getHits.get("hits");
System.out.println(hits);
} catch (IOException | ParseException e) {
throw new RuntimeException(e);
}
}
//==========================HighLevelClient================================
public List<Map<String,Object>> HighLevelClientQuery(){
List<Map<String,Object>> rules = new ArrayList<Map<String,Object>>();
String indexName = "indexName";
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(
QueryBuilders.matchAllQuery()
);
searchSourceBuilder.size(1000);
try {
SearchRequest request = new SearchRequest(indexName);
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits searchHits = response.getHits();
for(SearchHit hit : searchHits){
Map<String, Object> result = hit.getSourceAsMap();
rules.add(result);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
return rules;
}