• python中elasticsearch_dsl模块用法详解


    elasticsearch-dsl是基于elasticsearch-py封装实现的,提供了更简便的操作elasticsearch的方法。

    安装:

    install elasticsearch_ds

     

    连接elasticsearch

    from elasticsearch_dsl import connections, Search
    
    es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
    print(es)

    还可以通过alias给连接设置别名,后续可以通过别名来引用该连接,默认别名为default。

    from elasticsearch_dsl import connections, Search
    
    # 方式一:连接es
    es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
    print(es)
    
    # 方式二:连接es
    connections.create_connection(alias="my_new_connection", hosts=["127.0.0.1:9200"], timeout=20)

    elasticsearch_dsl.Search

    search对象代表整个搜索请求,包括:queries、filters、aggregations、sort、pagination、additional parameters、associated client。

    API被设置为可链接的即和用.连续操作。search对象是不可变的,除了聚合,对对象的所有更改都将导致创建包含该更改的浅表副本。

    当初始化Search对象时,传递elasticsearch客户端作为using的参数

    示例代码1:

    from elasticsearch_dsl import connections, Search
    
    # 方式一:连接es
    es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
    # print(es)
    
    # 方式二:连接es
    connections.create_connection(alias="my_new_connection", hosts=["127.0.0.1:9200"], timeout=20)
    
    # 不使用别名使用
    res = Search(using=es).index("test_index").query()
    # print(res)
    for data in res:
        print(data.to_dict())
    
    print("*" * 100)
    
    # 使用别名后这样使用
    res2 = Search(using="my_new_connection").index('test_index').query()
    # print(e)
    for data in res2:
        print(data.to_dict())

    运行结果

     

    示例代码2:

    from elasticsearch_dsl import connections, Search
    
    # 方式一:连接es
    es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
    # print(es)
    
    # 不使用别名使用
    res = Search(using=es).index("test_index").query()
    # print(res)
    for data in res:
        print(data.to_dict())
    
    print("*" * 100)
    
    # 书写方式一:按条件查询数据
    res2 = Search(using=es).index("test_index").query("match", name="张三")  # 查询时注意分词器的使用
    for data in res2:
        print(data.to_dict())
    
    print("*" * 100)
    
    # 书写方式二:按条件查询数据
    res3 = Search(using=es).index("test_index").query({"match": {"name": "张三"}})
    for data in res3:
        print(data.to_dict())

    运行结果:

     

    在上述执行execute方法将请求发送给elasticsearch:

    response = res.execute()

    不需要执行execute()方法,迭代后可以通过to_dict()方法将Search对象序列化为一个dict对象,这样可以方便调试。

    query方法

    查询,参数可以是Q对象,也可以是query模块中的一些类,还可以是自已写上如何查询。

    示例代码1:

    from elasticsearch_dsl import connections, Search, Q
    import time
    
    # 方式一:连接es
    es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
    # print(es)
    
    res = Search(using=es, index="test_index").query().query()  # 当调用.query()方法多次时,内部会使用&操作符
    print(res.to_dict())

    运行结果:

     

    filter方法

    在过滤上下文中添加查询,可以使用f

  • 相关阅读:
    软考高级架构师下篇-18大数据架构理论设计与实践
    叠氮聚乙二醇生物素 N3-PEG-Biotin Azide-PEG-Biotin的结构式
    ssm中小企业仓库管理信息系统的开发与实现毕业设计源码150916
    MySQL表的增删改查--你都知道吗?
    java读取word里面的表格数据
    【九日集训】《LeetCode刷题报告》题解内容 Ⅳ
    详解eval
    Docker学习笔记(一)安装Docker、镜像操作、容器操作、数据卷操作
    Rockland丨Rockland 抗体修饰-抗体偶联方案
    android jectpack DataBinding 数据绑定 改变ui的几种方式
  • 原文地址:https://blog.csdn.net/m0_72557783/article/details/126957624