2017-03-21 2 views
0

https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_indexing_documents.htmlelasticsearch의 대부분은 각 문서를 통해 당신에게, 벌크 덤프 데이터에

Elasticsearch의 API 문서를 바탕으로

는 기본적으로

for($i = 0; $i < 100; $i++) { 
    $params['body'][] = [ 
    'index' => [ 
     '_index' => 'my_index', 
     '_type' => 'my_type', 
    ] 
    ]; 

    $params['body'][] = [ 
    'my_field' => 'my_value', 
    'second_field' => 'some more values' 
    ]; 
} 

elasticsearch하는 루프를 수천 문서 수백 덤프 같은 메타 데이터를 추가 각 문서에 대해 호출 한 다음 대량 함수를 호출하여 이러한 데이터를 대량 덤프합니다.

Google Cloud Storage에 JSON (새 줄 구분 기호) 형식으로 데이터를 저장합니다. 파일에는 수십만 또는 수백만 개의 동일한 형식의 문서가 있습니다 (elasticsearch의 경우 동일한 색인/유형 메타 데이터).

Google Cloud Storage 파일을 Elasticsearch에 일괄 덤프하려면이 파일을 읽고이 파일의 각 문서를 반복하고 각 문서에 동일한 메타 데이터를 할당 한 다음 마지막으로 Elasticsearch에 대량 덤프해야합니다.

파일을 반복하고 각 문서에 대해 동일한 메타 데이터를 추가하는 대신 하나의 메타 데이터 (기본적으로 어떤 인덱스와 어떤 유형의이 문서를 인덱싱해야하는지)를 제공 할 수 있으며 전체 파일 (Json은 줄 바꿈 된 새 줄을 문서화합니다)을 입력하면 대량 덤프가 나머지 작업을 수행합니다.

아직 Elasticsearch 대량 API가이 기능을 제공하지 않는다는 것을 알고 있습니다.

하지만 s3이나 Google 클라우드 저장소에 저장되어있는 대량 덤프 json 파일은 elasticsearch에 일반적으로 필요하다고 가정합니다.

다른 사용자가 이미이 사용 사례를보고 문제를 해결했을 수 있습니다.

경험과 의견이 있으십니까?

감사합니다.

답변

1

PHP에서해야합니까? 그렇지 않다면, 내가 생각보다 elasticdump 트릭을해야합니다. 그것은 json으로부터 데이터를로드 할 수 있고 s3에서와 같이 보이며 ES에 삽입 할 수 있습니다. 데이터가 GCP에있는 경우 저장소에서 데이터를 스트리밍하고 elasticdump로 파이프에 연결하면됩니다.