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/n/248197.html
微信扫一扫
支付宝扫一扫