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)
上一篇:使用<?php,<?的主要优点和缺点,,<%in php


下一篇:C++ linux 头文件的缺失添加