ES是一種基於Lucene的搜索引擎,該搜索引擎提供了數據存儲、索引、搜索等強大的功能。對於需要從ES中導出數據的用戶而言,ES自帶的導出功能比較有限,比如單純的從query結果導出json格式的數據,因此,我們需要了解其他的ES數據導出方法。
一、從ES數據導出到文件
對於需要將ES中的數據導出到文件中的用戶而言,可以使用ES自帶的snapshot和restore功能。具體代碼如下:
PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/mount/backups/my_backup" } } PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
其中,my_backup為備份的名字,可以自定義,/mount/backups/my_backup為存儲位置,snapshot_1為快照的名字,可以根據需要自定義。通過以上代碼,即可將ES中的數據導出到指定位置。
二、從ES數據導出文本
對於需要將ES中的數據導出為文本文件的用戶而言,可以通過以下代碼來實現:
POST /_search { "query": { "match_all": {} } }
通過以上代碼,即可將ES中的數據導出為文本文件,文件格式為json。
三、從ES數據導出csv
對於需要將ES中的數據導出為csv格式的用戶而言,可以使用ES的scroll API和csv插件。代碼如下:
POST /_search?scroll=1m { "query": { "match_all": {} } } GET /_search/scroll?scroll_id=xxx&scroll=1m GET _search/scroll?scroll_id=xxx&scroll=1m { "query": { "match_all": {} } }
上述代碼會生成一個游標(實際上是一條記錄ID列表),您可以根據需要翻滾它並收集數據。然後,我們可以使用curl命令執行此操作並輸出到csv文件中:
curl -XPOST 'localhost:9200/_search?scroll=1m'<<EOF { "size": 10, "query": { "match_all": {} }, "sort": [ "_doc" ] } EOF scroll_id=$(curl -s -XPOST 'localhost:9200/_search?scroll=1m' -d ' { "size": 10, "query": { "match_all": {} }, "sort": [ "_doc" ] }' | jq ._scroll_id) while [ -n "$scroll_id" ]; do curl -s -XGET "localhost:9200/_search/scroll?scroll=1m&scroll_id=$scroll_id" | jq '.hits.hits[]._source | @tsv' >> es_csv.tsv scroll_id=$(curl -s -XGET "localhost:9200/_search/scroll?scroll=1m&scroll_id=$scroll_id" | jq ._scroll_id) done
四、ES數據導出與導入
對於需要將ES中的數據導出並導入到另一個ES中的用戶而言,可以使用ES自帶的snapshot和restore功能。具體代碼如下:
#導出數據 PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/mount/backups/my_backup" } } PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true #將數據導入到新的ES中 DELETE /test_index PUT /test_index POST /_snapshot/my_backup/snapshot_1/_restore { "indices": "test_index", "rename_pattern": "test_index", "rename_replacement": "restored_index" }
其中,test_index為原來的索引名,restored_index為新的索引名。通過以上代碼,即可將數據從一個ES中導出並導入到另一個ES中。
五、從ES數據導出到excel
對於需要將ES中的數據導出到excel表格的用戶而言,可以使用ES的scroll API和excel插件。代碼如下:
POST /_search?scroll=1m&size=100 { "query": { "match_all": {} }, "aggs": { "group_by_state": { "terms": { "field": "state" } } } }
上述代碼會生成一個游標(實際上是一條記錄ID列表),您可以根據需要翻滾它並收集數據。然後,我們可以使用curl命令將數據導出到excel表格中:
curl -X POST "localhost:9200/_search?scroll=1m&size=100" -H 'Content-Type: application/json' -d' { "query": { "match_all": {} }, "aggs": { "group_by_state": { "terms": { "field": "state" } } } }'> out.json python3 -m pip install pyexcel pyexcel-xls pyexcel-xlsx python3 -c "import pyexcel as p; e=p.get_sheet(file_name='out.json'); e.save_as('result.xls')"
六、ES數據遷移
對於需要將ES中的數據從一個伺服器遷移至另一個伺服器的用戶而言,可以使用ES的snapshot和restore功能配合rsync命令實現。具體代碼如下:
#在源伺服器上執行下述命令: PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/mount/backups/my_backup" } } PUT /_snapshot/my_backup/snapshot_1 sudo rsync -avz /mount/backups/my_backup/my_backup/snapshot_1/ <NEW_SERVER>:/mount/backups/my_backup/my_backup/snapshot_1/ #在目標伺服器上執行下述命令: DELETE /test_index PUT /test_index POST /_snapshot/my_backup/snapshot_1/_restore { "indices": "test_index", "rename_pattern": "test_index", "rename_replacement": "restored_index" }
以上代碼將ES中的數據從源伺服器遷移至目標伺服器。
七、ES數據連接工具
對於需要通過可視化工具來連接ES資料庫的用戶而言,可以使用Kibana工具。在Kibana中,用戶可以通過自定義查詢語句、聚合、圖表等方式來連接並展示ES中的數據。Kibana具有強大的數據挖掘和可視化能力,非常適合大數據的處理和分析。具體代碼如下:
GET /_search { "query": { "match_all": {} }, "size": 0, "aggs": { "group_by_state": { "terms": { "field": "state" } } } }
Kibana的使用相對比較複雜,需要下載和安裝,具體操作請參考Kibana官方文檔。
八、ES數據遷移工具選取
對於需要選擇ES數據遷移工具的用戶而言,可以根據實際需求選擇相應的工具。以下是一些常用的ES數據遷移工具:
- Logstash
- ElasticSearch Dump
- Transporter
- ES Import/Export
以上工具均可以實現ES數據的遷移,用戶可以根據實際需求進行選擇。
總結
通過本文的介紹,我們了解到了ES數據導出的多種方法,包括從ES數據導出到文件、導出文本、導出csv、導出與導入、導出到excel、數據遷移、數據連接工具以及數據遷移工具等。每一種方法都需要我們根據實際需求進行選擇,希望本文對您有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248197.html