Elasticsearch에 파일 업로드

몇 가지 Elasticsearch 기능을 사용하면 색인이 파일 시스템의 파일에서 읽을 수 있으므로 IBM Cloud® Databases for Elasticsearch에서 배치에 파일을 업로드할 수 있습니다. 파일은 알려진 위치에 저장되며 Elasticsearch는 해당 위치에서 파일을 읽을 수 있도록 구성됩니다.

배치에 업로드된 파일은 색인과 파일 시스템 모두에서 디스크 리소스를 사용합니다. 파일을 업그레이드하기 전에 배치를 스케일링해야 합니다.

기본 프로세스

  1. base64는 클라이언트 측에서 파일을 인코딩합니다.
  2. base64 문자열은 Elasticsearch 배치에서 ibm_file_sync 색인에 문서로 저장됩니다.
  3. Cloud Databases API 에서 파일 동기화를 트리거합니다.
  4. Elasticsearch 클러스터의 모든 노드는 색인에서 파일 컨텐츠를 다운로드하고 base64를 디코딩하며 /data/ibm_file_sync/current 디렉토리에 있는 배치의 디스크에 있는 파일을 복원합니다.
  5. 정기적으로 그리고 다시 시작할 때 파일이 모든 노드에 있는지 확인하기 위해 다시 동기화됩니다.
  6. 디스크에는 있지만 인덱스에는 없는 파일은 삭제됩니다. 색인에서 파일을 제거하여 디스크에서 파일을 삭제할 수 있습니다.

인덱스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. 이 목록에는 예가 포함되어 있으며 완전한 것은 아닙니다.