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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
### 集成ELK堆栈与Python项目 #### 使用Logstash处理日志数据 对于希望利用开源ELK堆栈来管理和分析其应用程序产生的大量结构化或非结构化工件的日志文件,可以采用grok插件解析特定格式的日志条目[^2]。例如,在WordPress环境中应用此方法时,需编辑`/etc/logstash/conf.d/xxxx.conf`配置文件以定义输入源、过滤器以及输出目的地。 针对Python程序而言,开发者可以通过编写自定义脚本来生成符合预期模式的日志记录,将其发送到Logstash实例进行进一步加工处理。这通常涉及设置合适的logging库指定适当的handler类以便于向网络端点传输消息: ```python import logging from logstash_async.handler import AsynchronousLogstashHandler logger = logging.getLogger('python-logger') logger.setLevel(logging.INFO) logstash_handler = AsynchronousLogstashHandler( host='localhost', port=5959, database_path='/path/to/db/file.sqlite' ) formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') logstash_handler.setFormatter(formatter) logger.addHandler(logstash_handler) logger.info('This is an info message.') ``` 上述代码片段展示了如何创建异步HTTP handler连接至本地运行的Logstash服务;同时设置了简单的日期时间戳加级别再加正文形式的消息模板。每当调用`logger.<level>()`函数就会触发一次新的事件提交给远端服务器做后续操作。 #### 数据存储与检索——Elasticsearch部分 一旦经过预处理后的文档被索引入库,则意味着它们已经准备好供查询引擎消费了。借助官方提供的Python客户端API能够轻松实现复杂条件下的全文搜索请求构建工作流: ```python from elasticsearch import Elasticsearch es_client = Elasticsearch(['http://localhost:9200']) response = es_client.search(index="my-index", body={ "query": { "match_phrase": {"content": "specific phrase"} } }) print(response['hits']['total']) for hit in response['hits']['hits']: print(hit['_source']) ``` 这里先初始化了一个指向默认地址的服务对象实例,接着执行了一次带有短语匹配子句作为参数传递进去的标准查找命令。最后遍历返回的结果集展示每一条命中项的具体内容摘要信息。 #### 可视化界面搭建-Kibana方面 完成以上两步之后便来到了最后一个环节即通过图形界面对收集起来的数据资源实施交互式探索活动。安装好对应版本号相匹配的应用软件包以后就可以着手设计仪表板布局方案啦! 进入Web控制台页面后按照提示逐步建立索引模式关联关系,随后挑选感兴趣的字段维度制作图表组件拖拽放置到空白区域形成整体效果。整个过程无需任何编程基础也能顺利完成哦~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值