python操作ElasticSearch建立索引并数据入库

本文介绍了如何使用Python与ElasticSearch交互,包括创建连接对象,建立并设置索引,以及如何批量和单个插入文档。在创建索引时,可以设置索引的碎片和复制数量,以及字段类型。使用bulk API进行批量插入能提高效率,但需要注意已存在数据的更新问题,需要使用update函数而非直接导入。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值