ElasticSearch - 抓取ES数据到本地文件

  • 使用此脚本可以将ES上的数据抓取到本地文件,因为使用ES scroll实现,所以不受限于limit 10000笔影响
  • 需要提前安裝 jq command
    • Linux 安裝 : sudo apt install jq
    • Centos 安裝 : sudo yum install jq
    • MacOS 安裝 : brew install jq
#!/bin/bash
# ------------------------------------------------------------------------------
# Filename : scroll_es_data.sh
# Revision : 1.0
# Date : 2019-06-12
# Author : junwei.gu
# Email : [email protected]
# Description : 抓取ES数据到本地文件
# ------------------------------------------------------------------------------

# 存放文件路径
FILE="/Users/kujudy/tools/es_data/scroll_temp"

# ES访问地址
HOST=""
# ES index
INDEX=""
# ES type
TYPE=""

#scroll数据
function scroll(){
    search_dsl='
        {
            "query": {
                "match_all": {}
            },
            "size": 100
        }
        '

    json=$(curl -s -XGET "$HOST/$INDEX/$TYPE/_search?scroll=1m" -H "Content-Type: application/json" -d "$search_dsl")
    scroll_id=$(echo $json | jq -c -r "._scroll_id")
    hits=$(echo $json | jq -c ".hits.hits")

    length=$(echo $hits | jq length)

    for i in $(seq $length)
    do
        index=$i-1
        hit=$(echo $hits | jq -c ".[$index]._source")
        echo $hit >> $FILE
    done

    scroll_dsl='{"scroll_id": "'"$scroll_id"'"}'

    while true
    do
        hits=$(curl -s -XGET "$HOST/_search/scroll?scroll=1m" -H "Content-Type: application/json" -d "$scroll_dsl" | jq -c ".hits.hits")

        if [ "$hits" == "" ];
        then
            echo "exit"
            exit
        fi

        length=$(echo $hits | jq length)

        for i in $(seq $length)
        do
            index=$i-1
            hit=$(echo $hits | jq -c ".[$index]._source")
            echo $hit >> $FILE
        done
    done
}

if [ -f $FILE ]; then
   rm $FILE
fi
touch "$FILE"

scroll

 

你可能感兴趣的:(ElasticSearch)