带你读《Elastic Stack 实战手册》之65:——3.5.19.1.Elasticsearch语言开发(Python)(上)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之65:——3.5.19.1.Elasticsearch语言开发(Python)(上)

3.5.19.Elasticsearch语言开发(Python/Nodejs/Java)

3.5.19.1.Elasticsearch语言开发(Python)

创作人:张刘毅

审稿人:周海清

 

简介

 

本节介绍如何使用 Python 操作 Elasticsearch(简称 ES ),将从以下几个方面进行阐述:

 

l 客户端选择

l 配置及初始化

l 常见 API 使用

l 优化建议

 

、客户端选择

 

Elasticsearch 官方提供了 low-level Python 客户端 elasticsearch-py,目的是为了给用

Python 代码操作 ES 提供统一、可扩展的编程接口。low-level Python 客户端的功能包括:

 

l 将 Python 的基本数据类型转换为 JSON

l 集群节点自动发现

l 负载平衡及线程安全

l 使用 helpers 的 bulk API 进行批量导入和 reindex 的功能

同时,官方也提供了建立在 elasticsearch-py 之上的高级库 elasticsearch-dsl,使用它可以更方便进行 DSL 查询。另外它还提供了一种类似 ORM 的方式将文档作为 Python 对象处理。

 

、 配置和初始化

 

1. 环境准备

 

Python 的客户端可以通过 pip 进行安装,我们选择国内的清华源加快下载速度:

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple elasticsearch

如果有异步编程需求的可以下载

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple elasticsearch[async]

2. 命令行测试

 

Python 由于其丰富的库函数和解释型语言特性使它成为多数平台上脚本测试的利器,我们在编写 Python 项目工程前可以在命令行里测试下和 ES 的交互是否正常。

>>> from datetime import datetime
>>> from elasticsearch import Elasticsearch
>>> es = Elasticsearch("localhost:9200")
>>> es.index(index="my-index-000001", doc_type="test-type", id=42, body={"any": "data", "timestamp": datetime.now()})
{'_index': 'my-index-000001', '_type': 'test-type', '_id': '42', '_version': 1, 'result': 'created', '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 0, '_primary_term': 1}

3. 初始化

客户端一般在全局作用域初始化,这样不仅提高性能也方便启用后台嗅探节点等功能。模版如下:

#导入es的python客户端
from elasticsearch import Elasticsearch
# 设置集群地址
client = Elasticsearch(
    ... # 客户端的配置信息
)
def main(request):
    ... # 使用客户端

l 指定连接

client = Elasticsearch(
    ['esnode1:port', 'esnode2:port'] 
    # 认证信息
    # http_auth=('elastic', 'changeme')
)

l 使用嗅探功能进行动态连接


client = Elasticsearch(
    ['esnode1:port', 'esnode2:port'],
    # 在做任何操作之前,先进行嗅探
    sniff_on_start=True,
    # 节点没有响应时,进行刷新,重新连接
    sniff_on_connection_fail=True,
    # 每 60 秒刷新一次
    sniffer_timeout=60
)
# 可以获取当前连接的节点来测试
 client.cluster.client.info()

4. 使用连接池

 

数据库是一项宝贵的资源,使用连接池技术可以减少连接开销从而提高程序性能。连接池是保存数据库连接实例的容器,ES 通过 ConnectionSelector 管理连接选择和无效连接。每次请求通过 get_connection 方法获取连接。如果连接失败将其标记 mark_dead 并设置超时,超时结束后将连接重新放回到连接池。

 

下面的代码示例中,使用 ES 类简单封装了 Elasticsearch 连接池的并发连接并示范了一个简单查询:查询含有 "FANCD2" 的 gene symbol。


# -*- coding=utf8 -*- 
import os
import json
from datetime import datetime
from elasticsearch import Elasticsearch, RequestsHttpConnection
from elasticsearch import Transport
from elasticsearch.exceptions import NotFoundError
class ES(object):
    # 索引的相关设置
    _index = "hgvs4variation"
    _type = "_doc"
    # ES类初始化设置,使用基于 requests 实例化 ES 连接池
    def __init__(self, hosts):
        self.conn_pool = Transport(hosts=hosts, connection_class=RequestsHttpConnection).connection_pool
    # 获取ES连接
    def get_conn(self):
        """
        从连接池获取一个连接
        """
        conn = self.conn_pool.get_connection()
        return conn
    #  向es集群发送一个请求
    def request(self, method, url, headers=None, params=None, body=None):
        conn = self.get_conn()
        try:
            status, headers, body = conn.perform_request(method, url, headers=headers, params=params, body=body)
        except NotFoundError as e:
            return None
              if method == "HEAD":
            return status
        return json.loads(body)
    def post(self, url, body=None, method="POST"):
        """使用post请求访问服务器"""
        data = self.request(method, url, body=body)
        return data
if __name__ == '__main__':
    ELASTICSEARCH = [{'host':'192.168.2.2','port':27000}]
    es=ES(ELASTICSEARCH)
    #获得连接
    res_conn = es.get_conn()
    print(res)
    #查询示例
    res_query = es.request(method='POST',body='{"query": { "match": { "#Symbol": "FANCD2"}}}',url='/_search')
    print(res_query)


 《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.19.Elasticsearch语言开发(Python/Nodejs/Java)—— 3.5.19.1.Elasticsearch语言开发(Python)(下) https://developer.aliyun.com/article/1226662

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
存储 数据库连接 API
Python环境变量在开发和运行Python应用程序时起着重要的作用
Python环境变量在开发和运行Python应用程序时起着重要的作用
84 15
|
1天前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
26 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
12天前
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
22 5
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
179 45
|
15天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
63 5
|
1月前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
181 3
如何使用Python开发API接口?
|
27天前
|
机器学习/深度学习 人工智能 关系型数据库
Python开发
Python开发
40 7
|
29天前
|
前端开发 安全 数据库
使用Python开发独立站的全面指南
本文详细介绍了如何使用Python及其Web框架Django和Flask快速搭建功能完善、易于管理的独立站。从Python和Web开发基础讲起,逐步覆盖环境搭建、项目创建、数据库设计、视图与URL路由、模板创建、表单处理、测试调试、部署优化及安全维护等内容,旨在帮助开发者高效构建稳定的Web应用。
68 1
|
1月前
|
缓存 API 数据库
Python哪个框架合适开发速卖通商品详情api?
在跨境电商平台速卖通的商品详情数据获取与整合中,Python 语言及其多种框架(如 Flask、Django、Tornado 和 FastAPI)提供了高效解决方案。Flask 简洁灵活,适合快速开发;Django 功能全面,适用于大型项目;Tornado 性能卓越,擅长处理高并发;FastAPI 结合类型提示和异步编程,开发体验优秀。选择合适的框架需综合考虑项目规模、性能要求和团队技术栈。
26 2
|
1月前
|
存储 API 数据安全/隐私保护
Python开发淘宝详情API的深入探索
通过Python开发淘宝详情API,你可以高效地获取商品信息,为电商运营和市场分析提供强有力的数据支持。本文详细介绍了注册开发者账号、获取API密钥、构建请求、解析响应数据等步骤,并探讨了相关的注意事项和最佳实践。希望这些内容能够帮助你更好地理解和使用淘宝开放平台的API接口,实现你的业务需求。
38 1

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版