Amazon Elasticsearch Service에서 데이터 인덱싱 - Amazon Elasticsearch Service

Amazon Elasticsearch Service에서 데이터 인덱싱

Elasticsearch에서는 REST API를 사용하기 때문에 문서를 인덱싱하는 방법이 무수히 많습니다. curl 같은 표준 클라이언트를 사용해도 되고, HTTP 요청을 보낼 수 있는 프로그래밍 언어를 사용해도 됩니다. 또한 Elasticsearch는 상호 작용 과정을 한층 더 간소화하기 위해 각종 프로그래밍 언어용 클라이언트도 갖추고 있습니다. 고급 사용자는 바로 Amazon Elasticsearch Service에 대한 HTTP 요청 서명 또는 Amazon Elasticsearch Service로 스트리밍 데이터 로드 단원으로 건너뛸 수 있습니다.

인덱싱에 대한 소개는 Open Distro for Elasticsearch 설명서를 참조하십시오.

인덱스에 대한 이름 지정 제약 조건

Elasticsearch 인덱스에는 다음과 같은 이름 지정 제약 조건이 있습니다.

  • 모든 문자는 소문자여야 합니다.

  • 인덱스 이름은 _ 또는 -로 시작할 수 없습니다.

  • 인덱스 이름에는 공백, 쉼표, :, ", *, +, /, \, |, ?, #, > 또는 <가 포함될 수 없습니다.

인덱스 유형 또는 문서 ID 이름에는 민감한 정보를 포함하지 마십시오. Elasticsearch은 URI(Uniform Resource Identifier)에 이러한 이름을 사용합니다. 서버 및 애플리케이션에서 흔히 HTTP 요청을 로깅하는데, 그럴 경우 URI에 민감한 정보가 포함된다면 불필요한 데이터 노출이 발생할 수 있습니다.

2018-10-03T23:39:43 198.51.100.14 200 "GET https://elasticsearch_domain/dr-jane-doe/flu-patients-2018/202-555-0100/ HTTP/1.1"

연결된 JSON 문서를 볼 수 있는 권한이 없는 경우에도 이 가짜 로그 줄을 통해, Doe 박사의 환자 중 전화 번호가 202-555-0100인 환자가 2018년에 독감에 걸린 적이 있음을 유추할 수 있습니다.

응답 크기 감소

_index_bulk API의 응답에는 많은 정보가 포함되어 있습니다. 이 정보는 요청을 해결하거나 재시도 로직을 구현하는 데 유용할 수 있지만 상당한 대역폭을 사용할 수 있습니다. 이 예에서 32바이트 문서를 인덱싱하면 339바이트의 응답이 발생합니다(헤더 포함).

PUT elasticsearch_domain/more-movies/_doc/1 {"title": "Back to the Future"}

응답

{ "_index": "more-movies", "_type": "_doc", "_id": "1", "_version": 4, "result": "updated", "_shards": { "total": 2, "successful": 2, "failed": 0 }, "_seq_no": 3, "_primary_term": 1 }

이 응답 크기는 최소한으로 보일 수도 있지만, 매일 문서 1,000,000개를 인덱싱하면(초당 약 11.5개의 문서) 응답당 339바이트로 매월 10.17GB의 다운로드 트래픽을 처리합니다.

데이터 전송 비용에 대한 우려가 있는 경우 filter_path 파라미터를 사용하여 Elasticsearch 응답의 크기를 줄입니다. 하지만 실패한 요청을 식별하거나 재시도하는 데 필요한 필드를 필터링하지 않도록 주의하십시오. 이러한 필드는 클라이언트에 따라 다릅니다. filter_path 파라미터는 모든 Elasticsearch REST API에 대해 작동하지만 _index_bulk API와 같이 자주 호출하는 API에 특히 유용합니다.

PUT elasticsearch_domain/more-movies/_doc/1?filter_path=result,_shards.total {"title": "Back to the Future"}

응답

{ "result": "updated", "_shards": { "total": 2 } }

필드를 포함하는 대신 - 접두사가 있는 필드를 제외할 수 있습니다. filter_path는 와일드카드도 지원합니다.

POST elasticsearch_domain/_bulk?filter_path=-took,-items.index._* { "index": { "_index": "more-movies", "_id": "1" } } {"title": "Back to the Future"} { "index": { "_index": "more-movies", "_id": "2" } } {"title": "Spirited Away"}

응답

{ "errors": false, "items": [ { "index": { "result": "updated", "status": 200 } }, { "index": { "result": "updated", "status": 200 } } ] }