Elastic Search Python ile veri indexleme
Elimizdeki bir csvden verileri okuyarak elastic search indeksleme işlemini yapcağız.
Burada önemli bir nokta işlemlerin hepsi rest api üzerinden yapılmaktadır. İndeks oluşturma csv parse etme vb tüm işlemler sadece örnek amaçlı hazırlanmıştır en iyi yöntem değildir, prod işlemleriniz için senaryonuza ihtiyacınıza göre en iyi uygulama/yöntem için araştırma yapmanızı ilgili uygulamaların dökümanlarını okumanızı veya bu alanda uzmanlığı olanlardan destek almanızı öneririm
ilk olarak eğer hazır indeksiniz yoksa elastic search üzerinde bir index oluşturalım 1 shard 1 replica şeklinde oluşturacağız Detaylı kaynak
curl -X PUT "elasticsearch.host:9200/first-index?pretty" -H 'Content-Type: application/json' -d'
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
}
'
şimdi python3 için aşağıdaki kurulumları yapıyoruz (varsa gerek yok)
sudo dnf install python3 # python3 kurulumu
sudo python3 -m pip install elasticsearch # elasticsearch kütüphanesi kurulumu
python script Detaylı kaynak
from datetime import datetime
import csv # csv kütüphanesi import
from elasticsearch import Elasticsearch # elastic search kütüphanesi import
es = Elasticsearch(["elasticsearch.host"], maxsize=25) # elastic search connection
index=0
with open('{file.path}', newline='',encoding='utf-8-sig') as csvfile:
spamreader = csv.reader(csvfile, delimiter=';', quotechar='|')
for row in spamreader:
index=index+1
doc = {
"Id":row[0],
"ReadingId":row[1],
"StationId":row[2],
"Date": datetime.strptime(row[3],'%Y-%m-%d %H:%M:%S.%f'), #2016-01-01 00:10:21.413
"Temperature":row[4] if row[4] != 'NULL' else None,
}
res = es.index(index="first-index", body=doc) # döküman sunucuya gönderiliyor
if ((index % 1000) == 0):
print(index)
es.indices.refresh(index="first-index") # index yenileniyor
print(index)
indekslediğimiz verileri sorgulayarak kontrol ediyoruz detaylı kaynak
curl -X GET "elasticsearch.host:9200/first-index/_search?pretty"