您的位置:

详解es数据导出方法

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数据迁移工具:

  1. Logstash
  2. ElasticSearch Dump
  3. Transporter
  4. ES Import/Export

以上工具均可以实现ES数据的迁移,用户可以根据实际需求进行选择。

总结

通过本文的介绍,我们了解到了ES数据导出的多种方法,包括从ES数据导出到文件、导出文本、导出csv、导出与导入、导出到excel、数据迁移、数据连接工具以及数据迁移工具等。每一种方法都需要我们根据实际需求进行选择,希望本文对您有所帮助。