ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python操作elasticsearch从创建索引到写入数据

2019-10-25 14:01:26  阅读:158  来源: 互联网

标签:index tags python doc 写入 elasticsearch test type id


一、创建索引

##安装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)

标签:index,tags,python,doc,写入,elasticsearch,test,type,id
来源: https://blog.csdn.net/m0_37886429/article/details/102741298

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有