일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- intervals
- 5amsung
- ElasticSearch
- java
- low level client
- analyze api
- es test data
- java set
- collect
- Elastic Stack
- mkdir
- mkdirs
- flow chart
- Warnings
- 코딩테스트
- elasticsearch java
- https warning
- 카드모으기 자바
- urllib3
- ES Query
- Draw.IO
- AbsDistinct
- draw.io down
- AbsDistinct java
- high level client
- ELK
- AbsDistinct 풀이
- es
- Collectors.toMap
- codility
- Today
- Total
5AMSUNG
[es8] HighLevelClient, LowLevelClient 본문
구백글(900gle) 의 개발 환경을 es8 로 바꾸고 나서 부터 문제가 발생했다. 글은 오암성에 쓰지만
프로젝트는 스티브 스잡의 'aqqle' 에 코드반영..
high level client 의 버전은 7.17 버전이후 8버전이 알파상태라 써도 되나 .. 싶은..
900gle 이 맛이 갔는데 이게 다 업데이트 때문이라는... es8.8.1 도 카피를 떳더니 충돌나서 데몬이 올라오지도 않고
암튼 ann 쿼리로 900gle 을 업데이트 하려고 했는데 이 쿼리가 es 8 부터 실행되는... 8.6 이상이였나..
아무튼 7.15 를 8.8.1 로 업데이트 하니.. 끝.. (해결이 아닌 맛이감)
문제의 쿼리
{
"query": {
"match_all": {}
},
"knn": {
"field": "name_vector",
"query_vector": ${query_vector},
"k": 5,
"num_candidates": 50,
"boost": 0.1
},
"size": ${SEARCH_SIZE}
}
elasticsearch java api 를 사용하라는 문서를 어디서 본거 같은데 출처가 어디였더라..
암튼 elasticsearch-java 는 업데이트도 잘해줘서 8.9 까지도 있고.. 이걸쓰고 high level client 를 안써야 하나
하는 쓰잘때기 없는 고민을 하다가
둘다 사용할수 있는 환경을 만들어 보기로..
이래저래 건들다 보니 low level 을 사용하려면 아래 라이브러리는 필수로 받아야 할듯하고
implementation group: 'co.elastic.clients', name: 'elasticsearch-java', version: '8.8.1'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.12.3'
implementation group: 'jakarta.json', name: 'jakarta.json-api', version: '2.1.2'
여기에 추가로 high level 용 라이브러리 하나 더 받으면
implementation group: 'org.elasticsearch.client', name: 'elasticsearch-rest-high-level-client', version: '7.17.4'
대충 이거 4개면 테스트 가능 우선 클라이언트 객체 부터 생성해보자
high level client 의 코드를 마이그레이션 한 low level client 생성
@Configuration
public class HighlevelClient extends Client{
@Bean
public RestHighLevelClient getHighClient() throws UnknownHostException {
// Create the HLRC
RestHighLevelClient high_client = new RestHighLevelClientBuilder(getHttpClient())
.setApiCompatibilityMode(true)
.build();
return high_client;
}
}
@Bean
public ElasticsearchClient getLowClient() throws UnknownHostException {
// Create the Java API Client with the same low level client
ElasticsearchTransport transport = new RestClientTransport(
getHttpClient(),
new JacksonJsonpMapper()
);
ElasticsearchClient low_client = new ElasticsearchClient(transport);
return low_client;
}
공통
public class Client {
@Value("#{'${elasticsearch.host}'.split(',')}")
protected List<String> hosts;
@Value("${elasticsearch.port}")
protected int port;
@Value("${elasticsearch.id}")
protected String id;
@Value("${elasticsearch.password}")
protected String password;
@Bean
protected RestClient getHttpClient(){
// Create the low-level client
RestClient httpClient = RestClient.builder(
new HttpHost(hosts.get(0), port)
).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider());
}
}).build();
return httpClient;
}
protected CredentialsProvider getCredentialsProvider() {
CredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(id, password));
return credentialsProvider;
}
}
이렇게 클라이언트를 생성해서 인덱스만 퀵하고 샥 하게 만들어 보면
public void index(){
try {
low.indices().create(c -> c.index("low-level"));
CreateIndexRequest request = new CreateIndexRequest("high-level");
CreateIndexResponse createIndexResponse = high.indices().create(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
}
low level 과 high level 각 1개씩 만들었는데 low level 이 더 깔끔해 보이는건.. 뭔지..
뭐가 나은건지는 모르겠지만..
버전관리가 잘되고있는 elasticsarch-java 만 사용해서 작업하는것도 나쁘지는 않을 것 같은데..
'Elastic Stack > elasticsearch' 카테고리의 다른 글
[es] 신조어 추천 (0) | 2023.06.02 |
---|---|
[es] elasticsearch 테스트용 코드 (0) | 2023.05.18 |
[es] _explain (0) | 2023.05.09 |
[es] 데이터 계층을 사용한 데이터 수명 주기 관리 (0) | 2023.05.08 |
[es] N-gram tokenizer (0) | 2023.05.08 |