首页 > 编程语言 >Python3 操作ES7

Python3 操作ES7

时间:2024-02-01 16:44:57浏览次数:35  
标签:ES7 index name res dsl es doc 操作 Python3

Python3 操作ES7

<iframe data-id="codeleading.com_750x200_responsive_5_DFP" data-rendered="true" frameborder="0" height="1" marginheight="0" marginwidth="0" scrolling="no" width="1"></iframe>  

Python3操作ES7

1、连接ES7,创建索引

from elasticsearch import Elasticsearch

es = Elasticsearch(['127.0.0.1:9200'])

index_name = 'student'

request_body = {
   "mappings": {
      "properties": {
         "name": {
            "type": "keyword"
         },
         "age": {
            "type": "integer"
         },
         "height": {
            "type": "integer"
         }
      }
   }
}

es.indices.create(index=index_name, body=request_body)
 
  • 1

2、判断索引是否存在

from elasticsearch import Elasticsearch

es = Elasticsearch(['127.0.0.1:9200'])

index_name = "student"

if es.indices.exists(index_name) == True:
   print('索引存在')
else:
   print("索引不存在")
 

3、删除ES7的 student 索引

from elasticsearch import Elasticsearch

es = Elasticsearch(['127.0.0.1:9200'])

index_name = 'student'

es.indices.delete(index=index_name)
 

4、Python3 操作 ES7(查询向)

from elasticsearch import Elasticsearch

es = Elasticsearch(['127.0.0.1:9200'])

index_name = 'student'

# -------------------------------------------查询

# ------------------------查询所有数据
dsl = {
    "query":{
        "match_all":{}
    }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)

# ------------------------等于查询,term与terms
# term: 查询 xx = “xx”
dsl = {
   "query": {
      "term": {
         "name": "张三"
      }
   }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # 查询name="张三"的所有数据
print(res)

# terms: 查询 xx = “xx” 或 xx = “yy”
dsl = {
   "query": {
      "terms": {
         "name": [
            "张三", "李四"
         ]
      }
   }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # 查询 name="张三" 或 name="李四" 的所有数据
print(res)

# ------------------------包含查询,match与multi_match
dsl = {
   "query": {
      "match": {
         "name": "张三"
      }
   }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # match: 匹配name包含"张三"关键字的数据
print(res)

dsl = {
   "query": {
      "multi_match": {
         "query": "李四",
         "fields": ["name", "addr"]
      }
   }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # multi_match: 在name和addr里匹配包含 李四 关键字的数据
print(res)

# ------------------------ids
dsl = {
   "query": {
      "ids": {
         # "type": "",
         "values": [
            "1", "2"
         ]
      }
   }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # 搜索出id为1或2的所有数据
print(res)

# ------------------------复合查询bool
# bool有3类查询关系,must(都满足),should(其中一个满足),must_not(都不满足)
dsl = {
   "query": {
      "bool": {
         "must": [
            {
               "term": {
                  "name": "张三"
               }
            },
            {
               "term": {
                  "age": "16"  # 实际张三是15岁,故而未命中
               }
            }
         ]
      }
   }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # 获取name="张三"并且age=16的所有数据
print(res)

# -----------------------切片式查询
dsl = {
    "query":{
        "match_all":{}
    },
    "from":0,    # 从第0条数据开始
    "size":1    # 获取1条数据
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # 从第0条数据开始,获取1条数据
print(res)

# -----------------------范围查询
dsl = {
   "query": {
      "range": {
         "age": {
            "gte": 18,  # >=18
            "lte": "30"  # <=30
         }
      }
   }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # 查询前缀为"李"的所有数据
print(res)

# -----------------------前缀查询
dsl = {
   "query": {
      "prefix": {
         "name": "李"
      }
   }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # 查询前缀为"李"的所有数据
print(res)

# -----------------------通配符查询
dsl = {
   "query": {
      "wildcard": {
         "name": "*三"
      }
   }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # 查询name以三为后缀的所有数据
print(res)

#---------------------------排序
dsl = {
    "query":{
        "match_all":{}
    },
    "sort":{
        "age":{                 # 根据age字段升序排序
            "order":"asc"       # asc升序,desc降序
        }
    }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)

dsl = {
    "query":{
        "match_all":{}
    },
    "sort":[
      {
         "age":{                # 先根据age字段升序排序
            "order":"asc"      # asc升序,desc降序
         }
      },
      {
         "name":{               # 后根据name字段升序排序
            "order":"asc"      # asc升序,desc降序
         }
      }
   ],
}  # 多字段排序,注意顺序!写在前面的优先排序
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)

# --------------------------filter_path, 响应过滤
# 只需要获取_id数据,多个条件用逗号隔开
# res = es.search(index=index_name,  doc_type='doc', filter_path=["hits.hits._id"])  # # 只需要获取_id数据,多个条件用逗号隔开
res = es.search(index=index_name,  doc_type='doc', filter_path=["hits.hits._*"])  # # 获取所有数据
print(res)

# ------------------count, 执行查询并获取该查询的匹配数
# 获取数据量
res = es.count(index=index_name, doc_type='doc')
print(res)

# ---------------------度量类聚合
# 获取最小值
dsl =  {
    "query":{
        "match_all":{}
    },
    "aggs":{                        # 聚合查询
        "min_age":{                 # 最小值的key
            "min":{                 # 最小
                "field":"age"       # 查询"age"的最小值
            }
        }
    }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # # 搜索所有数据,并获取age最小的值
print(res)

# 获取最大值
dsl = {
    "query":{
        "match_all":{}
    },
    "aggs":{                        # 聚合查询
        "max_age":{                 # 最大值的key
            "max":{                 # 最大
                "field":"age"       # 查询"age"的最大值
            }
        }
    }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # # 搜索所有数据,并获取age最大的值
print(res)

# 获取和
dsl ={
    "query":{
        "match_all":{}
    },
    "aggs":{                        # 聚合查询
        "sum_age":{                 # 和的key
            "sum":{                 # 和
                "field":"age"       # 获取所有age的和
            }
        }
    }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)  # 搜索所有数据,并获取所有age的和
print(res)

# 获取平均值
dsl = {
    "query":{
        "match_all":{}
    },
    "aggs":{                        # 聚合查询
        "avg_age":{                 # 平均值的key
            "sum":{                 # 平均值
                "field":"age"       # 获取所有age的平均值
            }
        }
    }
}
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)

# from、size
dsl = {
    "query":{
        "match_all":{}
    },
    "size":"50",
    "from":"0"
}
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)
  <iframe data-id="codeleading.com_728x90_responsive_1_DFP" data-rendered="true" frameborder="0" height="1" marginheight="0" marginwidth="0" scrolling="no" width="1"></iframe>

标签:ES7,index,name,res,dsl,es,doc,操作,Python3
From: https://www.cnblogs.com/xiao-xue-di/p/18001585

相关文章

  • 【操作系统和计网从入门到深入】(八)线程
    复习八·线程1.如何理解线程只要满足,比进程轻量化,cpu内所有线程资源共享,创建维护成本更低等要求,就能叫线程。不同的OS实现方式不同,下面这个是Linux特有的方案。Linux没有给线程重新设计数据结构!什么叫做进程?pcb+地址空间+页表CPU调度的基本单位:线程!2.开始使用pthre......
  • UnsupportedOperationException------“不支持的操作异常”
    在Java编程语言中,当你试图调用一个当前环境或对象不支持的方法时,就会抛出这个异常。例如:调用不可变集合(如通过Collections.unmodifiableList()创建的列表)的添加、删除或修改方法。使用Arrays.asList()返回的对象尝试修改其内容。在实现了某个接口但未提供所有必需实现方法的类......
  • java直连mysql操作数据
    连接器importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;/***@author:chenKeFeng*@date:2024/1/3010:21*/publicclassMySQLConnector{p......
  • linux用户组操作命令
    查看所有用户compgen是bash的内置命令,它将显示所有可用的命令,别名和函数。compgen-u查看当前用户属于那些组groups查看某个用户属于哪些组groups查看系统有哪些组getentgroup追加用户到新的用户组,让他处在多个组中-aG必须要加a,代表append,否则G会让用户脱离......
  • 【兼容认证】白鲸开源与银河麒麟高级服务器操作系统成功通过测试
    2024年1月2日,北京白鲸开源科技有限公司(以下简称"白鲸开源")荣幸宣布,白鲸开源旗下产品WhaleStudioV2.4已成功通过与麒麟软件有限公司旗下的银河麒麟高级服务器操作系统产品的兼容性测试。麒麟软件有限公司的银河麒麟高级服务器操作系统(飞腾版)V10和银河麒麟高级服务器操作系统......
  • VMware虚拟机安装统信uos桌面专业版操作系统
    统信uos桌面版版本对比:https://www.uniontech.com/next/product/desktop-contrast专业版只要是面向政企等单位,这里只是用虚拟机安装测试基本功能使用,对于我们个人要长期使用的话可以使用家庭版或者社区版1镜像下载1.1打开官网镜像在统信生态社区下载统信生态社区官网:http......
  • Linux下查询CPU,内存,磁盘及操作系统
    查询CPU核数nproc结果为4查询内存free-h#以人类(human)可读的方式展示结果为totalusedfreesharedbuff/cacheavailableMem:15Gi2.2Gi327Mi1.0Mi13Gi13GiSwap:......
  • 计算机的灵魂是操作系统
    要问计算机的灵魂是啥,那肯定是操作系统。这个词现如今对大多数人都不陌生。操作系统的英文名叫OperatingSystem,简单为OS。首先,大多数操作系统都是C语言或汇编语言开发的一系列程序组成的软件,其次,它主要的功能是控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户......
  • 龙蜥8.6 源码安装python3.12
    ​ 闲来无事用虚拟机安装了一下龙蜥系统。[root@localhosthome]#cat/etc/*release*AnolisOSrelease8.6NAME="AnolisOS"VERSION="8.6"ID="anolis"ID_LIKE="rhelfedoracentos"VERSION_ID="8.6"PLATFORM_ID="platform:an......
  • NanoFramework操作ESP32(一)_基础元器件篇(三十九)_ TCRT5000红外寻迹模块
    产品用途:1、电度表脉冲数据采样2、传真机碎纸机纸张检测3、障碍检测4、黑白线检测产品介绍:1、采用TCRT5000红外反射传感器2、检测反射距离:1mm~25mm适用3、工作电压:5V4、输出形式:数字信号(0和1)5、设有固定螺栓孔,方便安装6、小板PCB尺寸:3.5cmx1cm7、单重:4.5g功能介绍......