Elasticsearch에 파일 업로드
몇 가지 Elasticsearch 기능을 사용하면 색인이 파일 시스템의 파일에서 읽을 수 있으므로 IBM Cloud® Databases for Elasticsearch에서 배치에 파일을 업로드할 수 있습니다. 파일은 알려진 위치에 저장되며 Elasticsearch는 해당 위치에서 파일을 읽을 수 있도록 구성됩니다.
배치에 업로드된 파일은 색인과 파일 시스템 모두에서 디스크 리소스를 사용합니다. 파일을 업그레이드하기 전에 배치를 스케일링해야 합니다.
기본 프로세스
- base64는 클라이언트 측에서 파일을 인코딩합니다.
- base64 문자열은 Elasticsearch 배치에서
ibm_file_sync색인에 문서로 저장됩니다. - Cloud Databases API 에서 파일 동기화를 트리거합니다.
- Elasticsearch 클러스터의 모든 노드는 색인에서 파일 컨텐츠를 다운로드하고 base64를 디코딩하며
/data/ibm_file_sync/current디렉토리에 있는 배치의 디스크에 있는 파일을 복원합니다. - 정기적으로 그리고 다시 시작할 때 파일이 모든 노드에 있는지 확인하기 위해 다시 동기화됩니다.
- 디스크에는 있지만 인덱스에는 없는 파일은 삭제됩니다. 색인에서 파일을 제거하여 디스크에서 파일을 삭제할 수 있습니다.
인덱스Elasticsearch ~이다 ibm_file_sync.
디스크의 파일 위치는 /data/ibm_file_sync/current입니다.
Elasticsearch 7에서 API는 문서 유형을 제거합니다. 다음을 참조하세요.Elasticsearch 선적 서류 비치 상세 사항은. 특히 이전 버전에서 업데이트할 때를 기억하는 데 유용합니다.
파일을 색인에 업로드
인덱스의 문서 구조는 다음과 같습니다.name 파일의 파일 이름입니다.blob 은base64-encoded 파일 내용 및 md5 파일 내용에 대한 선택적 해시 값입니다. 인덱스에 권장되는 매핑은 버전에 따라 분할됩니다.
Elasticsearch 6의 경우:
curl -X PUT "https://user:password@host:port/ibm_file_sync" -H 'Content-Type: application/json' -d'
{
"mappings": {
"files": {
"properties": {
"name": {
"type": "text"
},
"blob": {
"type": "binary"
},
"md5": {
"type": "text"
}
}
}
}
}'
Elasticsearch 7의 경우(files 섹션의 제거에 주의):
curl -X PUT "https://user:password@host:port/ibm_file_sync" -H 'Content-Type: application/json' -d'
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"blob": {
"type": "binary"
},
"md5": {
"type": "text"
}
}
}
}'
URL은 배치의 https 연결 문자열입니다.
색인을 사용하려면 파일 컨텐츠를 base64로 인코딩하십시오. 예제 파일 README.md를 bash에서 인코딩하려면 ENC=$(base64 -w 0 README.md)를 사용하십시오. 그런 다음 컨텐츠 HASH=$(md5sum README.md)에 체크섬을 빌드하십시오.
다운로드 기능은 각 동기화 실행 시 해시 값을 비교하고, 마지막 동기화 이후 값이 변경되지 않은 경우 새 다운로드를 시도하지 않습니다. 색인의 문서에 md5 값이 없으면 모든 다운로드가 다시 시도됩니다.
그런 다음 문서를 색인에 업로드하십시오. 파일 이름은 URL에도 제공됩니다.
Elasticsearch 6의 경우:
curl -X PUT "https://user:password@host:port/ibm_file_sync/files/README1.md" -H 'Content-Type: application/json' -d'
{
"name": "README1.md",
"blob": '"\"$ENC\""',
"md5": '"\"$HASH\""'
}'
Elasticsearch 7의 경우(URL만 변경됨):
curl -X PUT "https://user:password@host:port/ibm_file_sync/_doc/README1.md" -H 'Content-Type: application/json' -d'
{
"name": "README1.md",
"blob": '"\"$ENC\""',
"md5": '"\"$HASH\""'
}'
업로드된 데이터를 확인할 수 있습니다.
Elasticsearch 6의 경우:
curl https://user:password@host:port/ibm_file_sync/files/README.md?pretty
Elasticsearch 7의 경우:
curl https://user:password@host:port/ibm_file_sync/_doc/README.md?pretty
모든 것이 순조롭게 진행되면 리턴되는 데이터는 이(축약된) 예제와 같습니다. "md5 " 필드에는 해시와 함께 파일 이름이 포함될 수 있습니다.
Elasticsearch 6의 경우:
{
"_index" : "ibm_file_sync",
"_type" : "files",
"_id" : "README1.md",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "README1.md",
"blob" : "IyBF ... KWBgCg==",
"md5" : "270f60e62d3d37add3702ced7f6969a1 README.md"
}
}
Elasticsearch 7의 경우:
{
"_index" : "ibm_file_sync",
"_id" : "README1.md",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "README1.md",
"blob" : "IyBF ... KWBgCg==",
"md5" : "270f60e62d3d37add3702ced7f6969a1 README.md"
}
}
디스크에 파일 동기화
파일이 인덱스에 업로드된 후 디스크에 동기화될 수 있습니다. Cloud Databases API에서 /elasticsearch/file_syncs 엔드포인트를 호출하십시오.
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/elasticsearch/file_syncs \
-H 'authorization: Bearer <token>'
region은 배치가 있는 지역이며 URL의 id(CRN) 부분을 URL 인코딩해야 합니다. 자세한 정보는 API 참조에 나와 있습니다.
호출이 시작되고 태스크가 리턴되므로 진행 상황을 모니터링 할 수 있습니다. 리턴된 태스크가 완료되면 색인의 내용이 클러스터의 모든 노드에 표시됩니다.
원하는 수의 파일을 업로드하고 동기화할 수 있습니다. 파일의 컨텐츠가 확인되지 않습니다. Elasticsearch에서 처리할 수 있는지 확인하십시오.
파일 사용
Elasticsearch 파일 시스템의 파일을 사용하는 기능은 인덱스를 정의할 때 파일 경로를 허용하여 이를 수행합니다. 업로드된 파일 example.txt 에 있습니다 /data/ibm_file_sync/current/example.txt. 이 목록에는 예가 포함되어 있으며 완전한 것은 아닙니다.