python操作elasticsearch從創建索引到寫入數據

一、創建索引

##安裝elasticsearch :  pip install elasticsearch 

##創建索引
from elasticsearch import Elasticsearch
es = Elasticsearch('192.168.0.144:9200')

mappings = {
	"mappings": {
		"type_doc_test": {  #type_doc_test爲doc_type
			"properties": {
				"id": {
					"type": "long",
					"index": "false"
				},
				"serial": {
					"type": "keyword",      #keyword不會進行分詞,text會分詞
					"index": "false"        #不建索引
				},
				#tags可以存json格式,訪問tags.content
				"tags": {
					"type": "object",
					"properties": {
						"content": {
							"type": "keyword",  
							"index": True      
						},
						"dominant_color_name": {
							"type": "keyword",
							"index": True
						},
						"skill": {
							"type": "keyword",
							"index": True
						},
					}
				},
				"hasTag": {
					"type": "long",
					"index": True
				},
				"status": {
					"type": "long",
					"index": True
				},
				"createTime": {
					"type": "date",
					"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
				},
				"updateTime": {
					"type": "date",
					"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
				}
			}
		}
	}
}

res = es.indices.create(index ='index_test',body =mappings)

print(res)
#返回數據:{'acknowledged': True, 'shards_acknowledged': True, 'index': 'index_test'}

二、寫入一條數據

寫入數據需要根據 創建的es索引類型對應的數據結構寫入

from elasticsearch import Elasticsearch
es = Elasticsearch('192.168.0.144:9200')

action ={
   "id": "1111122222",
   "serial":"版本",
   #以下tags.content是錯誤的寫法
   #"tags.content" :"標籤2",
   #"tags.dominant_color_name": "域名的顏色黃色",
   #正確的寫法如下:
   "tags":{"content":"標籤3","dominant_color_name": "域名的顏色黃色"},
   #按照字典的格式寫入,如果用上面的那種寫法,會直接寫成一個tags.content字段。
   #而不是在tags中content添加數據,這點需要注意
   "tags.skill":"分類信息",
   "hasTag":"123",
   "status":"11",
   "createTime" :"2019-10-2",
   "updateTime":"2019-10-3",
}
es.index(index="index_test",doc_type="doc_type_test",body = action)

三、寫入多條數據

from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk

es = Elasticsearch('192.168.0.144:9200')

ACTIONS = []

action1 ={
  "_index": "indes_test",
  "_type": "doc_type_test",
  "_id":"bSlegGUBmJ2C8ZCSC1R1",
  "_source":{
    "id": "1111122222",
    "serial":"版本",
    "tags.content" :"標籤2",
    "tags.dominant_color_name": "域名的顏色黃色",
    "tags.skill":"分類信息",
    "hasTag":"123",
    "status":"11",
    "createTime" :"2019-10-2",
    "updateTime":"2019-10-3",
  }
}
action2 ={
  "_index": "indes_test",
  "_type": "doc_type_test",
  "_id":"bSlegGUBmJ2C8ZCSC1R2",
  "_source":{
    "id": "1111122222",
    "serial":"版本",
    "tags.content" :"標籤2",
    "tags.dominant_color_name": "域名的顏色黃色",
    "tags.skill":"分類信息",
    "hasTag":"123",
    "status":"11",
    "createTime" :"2019-10-2",
    "updateTime":"2019-10-3",
  }
}

ACTIONS.append(action1)
ACTIONS.append(action2)

res,_ =bulk(es, ACTIONS, index="index_test", raise_on_error=True)
print(res)

#返回結果:2

以上方式是手動指定了"_id",如果把"_id"這個參數去掉即可自動生成"_id"數據,如下:

action2 ={
  "_index": "indes_test",
  "_type": "doc_type_test",
  "_source":{
    "id": "1111122222",
    "serial":"版本",
    "tags.content" :"標籤2",
    "tags.dominant_color_name": "域名的顏色黃色",
    "tags.skill":"分類信息",
    "hasTag":"123",
    "status":"11",
    "createTime" :"2019-10-2",
    "updateTime":"2019-10-3",
  }
}

四、刪除一條數據

from elasticsearch import Elasticsearch
es = Elasticsearch('192.168.0.144:9200')
res = es.delete(index="index_test",doc_type="doc_type_test", id ="bSlegGUBmJ2C8ZCSC1R1")
print(res)

#返回結果:{'_index': 'index_test', '_type': 'doc_type_test', '_id': 'bSlegGUBmJ2C8ZCSC1R2', '_version': 3, 'result': 'deleted', '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 2, '_primary_term': 1}

五、查詢一條數據

from elasticsearch import Elasticsearch
es = Elasticsearch('192.168.0.144:9200')
res = es.get(index="index_test",doc_type="doc_type_test",  id ="bSlegGUBmJ2C8ZCSC1R2")
print(res)

## 直接替換id的即可查詢所需的id

六、查詢所有數據

from elasticsearch import Elasticsearch
es = Elasticsearch('192.168.0.144:9200')
res = es.search(index="index_test",doc_type="doc_type_test")

print(res)
print(res['hits']['hits'])

通過['hits']參數,可以解析出查詢數據的詳細內容

七、根據關鍵詞查找

from elasticsearch import Elasticsearch

es = Elasticsearch('192.168.0.144:9200')

doc = {
	"query": {
		"match": {
			"_id": "aSlZgGUBmJ2C8ZCSPVRO"
		}
	}
}

res = es.search(index="index_test",doc_type="doc_type_test",body=doc)
print(res)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章