SHA-256이란? http://wiki.hash.kr/index.php/SHA256
SHA-256 해시 함수는 어떤 길이의 값을 입력하더라도 256비트의 고정된 결과값을 출력한다. 일반적으로 입력값이 조금만 변동하여도 출력값이 완전히 달라지기 때문에 출력값을 토대로 입력값을 유추하는 것은 거의 불가능하다. 아주 작은 확률로 입력값이 다름에도 불구하고 출력값이 같은 경우가 발생하는데 이것을 충돌이라고 한다. 이러한 충돌의 발생 확률이 낮을수록 좋은 함수라고 평가된다.
그렇다면 ES의 Document의 id를 적재하고자 하는 데이터의 HASH로 사용하면 멱등성 적재가 되지 않을까?
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200)));
BulkRequest request = new BulkRequest();
String data = "{\"data\":{\"type\":\"company\",\"name\":\"es\",\"time\":\"2022-01-29T01:59:00.275Z\"}}";
String index = "test-log";
request.add(new IndexRequest(index)
.source(data, XContentType.JSON)
.id(encrypt(data)));
client.bulk(request, RequestOptions.DEFAULT);
client.close();
encrypt 메서드
public static String encrypt(String text) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(text.getBytes());
return bytesToHex(md.digest());
}
private static String bytesToHex(byte[] bytes) {
StringBuilder builder = new StringBuilder();
for (byte b : bytes) {
builder.append(String.format("%02x", b));
}
return builder.toString();
}
반응형
'빅데이터 > Elasticsearch' 카테고리의 다른 글
ElasticsearchClient 7.17.7 기준 java client example code (0) | 2022.11.28 |
---|---|
엘라스틱서치에 중복 id로 값을 보내면? (0) | 2020.09.27 |
Elasticsearch, Logstash, Kibana 버젼별 하위호환표 (0) | 2020.03.26 |
엘라스틱서치에서 field 와 field.keyword 의 차이(text와 keyword) (0) | 2020.03.06 |
Python으로 elasticsearch에 document 넣기 예제 및 결과물 (257) | 2019.08.07 |