2017-03-21 112 views
0

https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_indexing_documents.htmlelasticsearch成批成千上萬的文件

基於Elasticsearch API文檔

要批量轉儲數據elasticsearch

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' 
    ]; 
} 

基本上,你遍歷每個文檔,添加相同的元數據爲每個文檔,然後調用批量函數批量轉儲這些數據。

我將數據保存爲Google Cloud Storage中的JSON(換行符分隔)格式。文件中有數十萬或數百萬個相同格式的文檔(與elasticsearch相同的索引/類型元數據)。

要將此Google雲端存儲文件批量轉儲到Elasticsearch,我必須讀入此文件並遍歷該文件中的每個文檔,爲每個文檔分配相同的元數據,然後將最終批量轉儲至Elasticsearch。

這將是很好,我可以給一個元數據(基本上爲哪些索引和哪些類型這些文檔應該被索引),而不是循環遍歷文件併爲每個文檔添加相同的元數據,並給予整體文件(Json文檔新行分隔),然後批量轉儲將完成剩下的工作。

瞭解Elasticsearch批量API尚未提供此功能。

但我認爲,在s3中保存的批量轉儲json文件或谷歌雲存儲到elasticsearch是常見的需求。

所以別人可能已經遇到了這個用例並解決了這個問題。

您的經驗有何建議和建議?

謝謝!

回答

1

你必須從PHP做到這一點嗎?如果沒有,比我認爲elasticdump應該做的伎倆。它可以從json加載數據(並且看起來像s3一樣)並將其插入到ES中。如果您的數據位於GCP上,則只需從存儲流式加載數據,並將其傳輸到彈性轉儲

相關問題