今天要教大家如何用python操作es來建立第一個自己的index,在開始之前記得把前面幾篇的mapping教學看個透徹喔!
第1件事一定是先安裝套件,這邊使用python3做示範,大家可以自己選擇要不要用virtualenv切割虛擬環境,這邊就不對virtualenv多做教學,網路上有很多文章大家可以自行去google
1.安裝套件
pip3 install elasticsearch
2.建立es連接
from elasticsearch import Elasticsearch
# host跟port跟打上es的host跟port
es = Elasticsearch(hosts='192.168.1.59', port=9200)
這邊先用前面的mappings建立一個存放學生名單的index
3.定義mapping
{
"mappings": {
"properties": {
"sid": {
"type": "integer"
},
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"class": {
"type": "keyword"
}
}
}
}
4.設定settings
{
"settings": {
"index": {
"number_of_shards": 3, #設定主分片
"number_of_replicas": 1 #設定副本分片
}
}
}
ps.主分片只能在建立之前設定,副本分片之後還能再更改
5.打包body,整理成以下這樣,在python裡面直接用dict操作就可以了
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings": {
"properties": {
"sid": {
"type": "integer"
},
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"class": {
"type": "keyword"
}
}
}
}
操作es index時使用的是elasticsearch底下的indices這個class,建立index時使用的是indices底下create這個方法,看下面程式碼範例
#es是一開始建立的es連接
es.indices.create(index='index名稱', body=上面整理好的body)
都準備完了就可以執行來看看有沒有成功囉!
以下是完整的程式碼:
from elasticsearch import Elasticsearch
import json
def create_index(es):
body = dict()
body['settings'] = get_setting()
body['mappings'] = get_mappings()
print(json.dumps(body)) #可以用json.dumps輸出來看格式有沒又包錯
es.indices.create(index='school_members', body=body)
def get_setting():
settings = {
"index": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
return settings
def get_mappings():
mappings = {
"properties": {
"sid": {
"type": "integer"
},
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"class": {
"type": "keyword"
}
}
}
return mappings
if __name__ == "__main__":
es = Elasticsearch(hosts='192.168.1.59', port=9200)
create_index(es)
下面再介紹一些常見方法
result = es.indices.get(index='school_members') #index指定要get哪個index的資訊
print(result)
result = es.indices.exists(index='school_members')
print(result)
今天的介紹到這邊結束,下篇會介紹如何重新put mappings跟index的別名機制