1、创建连接对象
from elasticsearch import RequestsHttpConnection, Elasticsearch
class MyConnection(RequestsHttpConnection):
def __init__(self, *args, **kwargs):
proxies = kwargs.pop('proxies', {})
super(MyConnection, self).__init__(*args, **kwargs)
self.session.proxies = proxies
esclient_dns = Elasticsearch(["http://ip:host"],
connection_class=MyConnection,
proxies={'http': None},
timeout=600,
max_retries=10,
retry_on_timeout=True)
2、建立索引,并设置索引
说明:如果在没有索引的情况下往ES库中插入文档(document),系统会自动创建索引(文档中有索引信息)。但我们有时需要进行一些设置,比如索引包含几个碎片(shards),几份复制(replicas),还有文档中有的字段(field)的数据类型等,这些设置需要在文档插入之前完成;下面是创建并设置索引的代码
-
python代码创建:
注意:ES一旦创建,所有的字段类型都不能变;不设定"dynamic" : "strict"时,可以增加字段
CREATE_BODY = {
"settings": {
"number_of_shards": 4, # 数据自动会分成四片存放在不同的节点,提高数据检索速度
"number_of_replicas": 0 # 创建0个副本集,如果ES是集群,设置多副本会自动将副本创建到多个节点;设置多副本可以增加数据库的安全性,但是插数据的时候,会先向主节点插入数据,之后再向其余副本同步,会降低插入数据速度,差不多会降低1.4到1.6倍
},
"mappings": {
"dns_info": { # 文档类型为dns_info
"dynamic": "strict",
"properties": {
"first_seen": {
"format": "YYYY-MM-dd'T'HH:mm:ss.SSS'Z'", # 自己指定时间格式,如果值为date_time,则是ES默认时间格式,如:2018-08-15 10:13:45 GMT
"type": "date"
},
"last_seen": {
"format": "YYYY-MM-dd'T'HH:mm:ss.SSS'Z'",
"type": "date"
},
"id": {
"index": "not_a