iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
1
Elastic Stack on Cloud

Python&Elasticsearch 入門系列 第 11

IT鐵人第11天 Elasticsearch 使用python匯入資料

  • 分享至 

  • xImage
  •  

前幾篇的教學教大家建立了一個自己的index,有了index怎麼可以沒有doc(文檔)呢,今天就來教大家把資料匯入ES

有兩個方法可以往es裡丟資料:create、index
這兩者的差異是create需要指定id而index如果沒有指定id則會自動生成,其餘用法其實差不多,這邊用index來做示範
假設我有以下的csv
https://ithelp.ithome.com.tw/upload/images/20200923/20129976EOUM12dxs3.png

1.利用python將資料源整理成mappings的格式,例如以下:

{
    'sid': 's1090101',
    'name': '王小明',
    'age': 18,
    'class': '資工一1'
}

過程就不多做贅述

2.使用index這個方法把剛剛整理好的資料源丟進去

index

es.index(index='school_members', body=剛剛整理好的資料源)

完整程式碼在下面:

from elasticsearch import Elasticsearch

def load_datas():
    datas = list()
    with open('student.csv', 'r') as f:
        for data in f.readlines():
            sid, name, age, class_ = data.replace('\n', '').split(',')
            datas.append(
                {
                    "sid": sid,
                    "name": name,
                    "age": int(age),
                    "class": class_
                }
            )
    return datas

def create_data(es, datas):
    for data in datas:
        es.index(index='school', body=data)  

if __name__ == "__main__":
    es = Elasticsearch(hosts='192.168.1.59', port=9200)
    datas = load_datas()
    create_data(es, datas)

create:

需要給id

es.index(index='school_members', body=剛剛整理好的資料源, id=1)

delete

刪除資料

es.delete(index='school_members', id=想要刪除的文檔id)

update

更新資料
定義body:

{
    "doc": {
        "age": 20 #想更新的欄位:更新的值
    }
}

執行

es.update(index='school_members', id=想要更新的文檔id)

今天的教學就到這裡,下篇來教大家可以批量對文檔操作的方法:bulk


上一篇
IT鐵人第10天 Elasticsearch 使用python建立index(2)
下一篇
IT鐵人第12天 Elasticsearch 使用python匯入資料(2) bulk
系列文
Python&Elasticsearch 入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
kamisamakiss
iT邦新手 5 級 ‧ 2021-04-05 10:47:07

id一定是數字嗎?

我要留言

立即登入留言