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、数据迁移、数据连接工具以及数据迁移工具等。每一种方法都需要我们根据实际需求进行选择,希望本文对您有所帮助。