Python使用zdppy_es国产框架操作Elasticsearch实现增删改查

Python使用zdppy_es国产框架操作Elasticsearch实现增删改查

本套教程配套有录播课程和私教课程,欢迎私信我。

Docker部署ElasticSearch7

创建基本容器

bash 复制代码
docker run -itd --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms2g -Xmx2g"  elasticsearch:7.17.17

配置账号密码

容器中配置文件的路径:

bash 复制代码
/usr/share/elasticsearch/config/elasticsearch.yml

把配置文件复制出来:

bash 复制代码
# 准备目录
sudo mkdir -p /docker
sudo chmod 777 -R /docker
mkdir -p /docker/elasticsearch/config
mkdir -p /docker/elasticsearch/data
mkdir -p /docker/elasticsearch/log

# 拷贝配置文件
docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /docker/elasticsearch/config/elasticsearch.yml

将配置文件修改为如下内容:

bash 复制代码
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
# 此处开启xpack
xpack.security.enabled: true

把本机的配置文件复制到容器里面:

bash 复制代码
docker cp /docker/elasticsearch/config/elasticsearch.yml elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml

重启ES服务:

bash 复制代码
docker restart elasticsearch

进入容器,设置es的密码:

bash 复制代码
docker exec -it elasticsearch bash
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

执行上面的命令以后,输入y,会有如下提示,全都输入:zhangdapeng520

bash 复制代码
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Passwords do not match.
Try again.
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Enter password for [kibana_system]: 
Reenter password for [kibana_system]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Enter password for [remote_monitoring_user]: 
Reenter password for [remote_monitoring_user]: 
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

将会得到如下用户名和密码:

bash 复制代码
elastic
zhangdapeng520

apm_system
zhangdapeng520

kibana_system
zhangdapeng520

logstash_system
zhangdapeng520

beats_system
zhangdapeng520

remote_monitoring_user
zhangdapeng520

在宿主机中测试是否成功:

bash 复制代码
# 不带用户名密码
curl localhost:9200

# 带用户名密码
curl localhost:9200 -u elastic

建立连接

python 复制代码
from es import Elasticsearch

auth = ("elastic", "zhangdapeng520")
es = Elasticsearch("http://192.168.234.128:9200/", basic_auth=auth)
print(es.info())

创建索引

python 复制代码
from es import Elasticsearch

# 连接es
auth = ("elastic", "zhangdapeng520")
edb = Elasticsearch("http://192.168.234.128:9200/", basic_auth=auth)

# 创建索引
index = "user"
mappings = {
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "text"},
        "age": {"type": "integer"},
    }
}
edb.indices.create(index=index, mappings=mappings)

# 删除索引
edb.indices.delete(index=index)

新增数据

python 复制代码
from es import Elasticsearch

# 连接es
auth = ("elastic", "zhangdapeng520")
edb = Elasticsearch("http://192.168.234.128:9200/", basic_auth=auth)

# 创建索引
index = "user"
mappings = {
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "text"},
        "age": {"type": "integer"},
    }
}
edb.indices.create(index=index, mappings=mappings)

# 添加数据
edb.index(
    index=index,
    id="1",
    document={
        "id": 1,
        "name": "张三",
        "age": 23,
    }
)

# 删除索引
edb.indices.delete(index=index)

根据ID查询数据

python 复制代码
from es import Elasticsearch

# 连接es
auth = ("elastic", "zhangdapeng520")
edb = Elasticsearch("http://192.168.234.128:9200/", basic_auth=auth)

# 创建索引
index = "user"
mappings = {
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "text"},
        "age": {"type": "integer"},
    }
}
edb.indices.create(index=index, mappings=mappings)

# 添加数据
edb.index(
    index=index,
    id="1",
    document={
        "id": 1,
        "name": "张三",
        "age": 23,
    }
)

# 查询数据
resp = edb.get(index=index, id="1")
print(resp["_source"])

# 删除索引
edb.indices.delete(index=index)

批量新增数据

python 复制代码
from es import Elasticsearch

# 连接es
auth = ("elastic", "zhangdapeng520")
edb = Elasticsearch("http://192.168.234.128:9200/", basic_auth=auth)

# 创建索引
index = "user"
mappings = {
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "text"},
        "age": {"type": "integer"},
    }
}
edb.indices.create(index=index, mappings=mappings)

# 添加数据
data = [
    {
        "id": 1,
        "name": "张三1",
        "age": 23,
    },
    {
        "id": 2,
        "name": "张三2",
        "age": 23,
    },
    {
        "id": 3,
        "name": "张三3",
        "age": 23,
    },
]
new_data = []
for u in data:
    new_data.append({"index": {"_index": index, "_id": f"{u.get('id')}"}})
    new_data.append(u)
edb.bulk(
    index=index,
    operations=new_data,
    refresh=True,
)

# 查询数据
resp = edb.get(index=index, id="1")
print(resp["_source"])
resp = edb.get(index=index, id="2")
print(resp["_source"])
resp = edb.get(index=index, id="3")
print(resp["_source"])

# 删除索引
edb.indices.delete(index=index)

查询所有数据

python 复制代码
from es import Elasticsearch

# 连接es
auth = ("elastic", "zhangdapeng520")
edb = Elasticsearch("http://192.168.234.128:9200/", basic_auth=auth)

# 创建索引
index = "user"
mappings = {
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "text"},
        "age": {"type": "integer"},
    }
}
edb.indices.create(index=index, mappings=mappings)

# 添加数据
data = [
    {
        "id": 1,
        "name": "张三1",
        "age": 23,
    },
    {
        "id": 2,
        "name": "张三2",
        "age": 23,
    },
    {
        "id": 3,
        "name": "张三3",
        "age": 23,
    },
]
new_data = []
for u in data:
    new_data.append({"index": {"_index": index, "_id": f"{u.get('id')}"}})
    new_data.append(u)
edb.bulk(
    index=index,
    operations=new_data,
    refresh=True,
)

# 查询数据
r = edb.search(
    index=index,
    query={"match_all": {}},
)
print(r)
print(r.get("hits").get("hits"))

# 删除索引
edb.indices.delete(index=index)

提取搜索结果

python 复制代码
from es import Elasticsearch

# 连接es
auth = ("elastic", "zhangdapeng520")
edb = Elasticsearch("http://192.168.234.128:9200/", basic_auth=auth)

# 创建索引
index = "user"
mappings = {
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "text"},
        "age": {"type": "integer"},
    }
}
edb.indices.create(index=index, mappings=mappings)

# 添加数据
data = [
    {
        "id": 1,
        "name": "张三1",
        "age": 23,
    },
    {
        "id": 2,
        "name": "张三2",
        "age": 23,
    },
    {
        "id": 3,
        "name": "张三3",
        "age": 23,
    },
]
new_data = []
for u in data:
    new_data.append({"index": {"_index": index, "_id": f"{u.get('id')}"}})
    new_data.append(u)
edb.bulk(
    index=index,
    operations=new_data,
    refresh=True,
)

# 查询数据
r = edb.search(
    index=index,
    query={"match_all": {}},
)


def get_search_data(data):
    new_data = []

    # 提取第一层
    hits = r.get("hits")
    if hits is None:
        return new_data

    # 提取第二层
    hits = hits.get("hits")
    if hits is None:
        return new_data

    # 提取第三层
    for hit in hits:
        new_data.append(hit.get("_source"))
    return new_data


print(get_search_data(r))

# 删除索引
edb.indices.delete(index=index)

根据ID修改数据

python 复制代码
import time

from es import Elasticsearch

# 连接es
auth = ("elastic", "zhangdapeng520")
edb = Elasticsearch("http://192.168.234.128:9200/", basic_auth=auth)

# 创建索引
index = "user"
mappings = {
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "text"},
        "age": {"type": "integer"},
    }
}
edb.indices.create(index=index, mappings=mappings)

# 添加数据
data = [
    {
        "id": 1,
        "name": "张三1",
        "age": 23,
    },
    {
        "id": 2,
        "name": "张三2",
        "age": 23,
    },
    {
        "id": 3,
        "name": "张三3",
        "age": 23,
    },
]
new_data = []
for u in data:
    new_data.append({"index": {"_index": index, "_id": f"{u.get('id')}"}})
    new_data.append(u)
edb.bulk(
    index=index,
    operations=new_data,
    refresh=True,
)

# 修改
edb.update(
    index=index,
    id="1",
    doc={
        "id": "1",
        "name": "张三333",
        "age": 23,
    },
)

# 查询数据
time.sleep(1)  # 等一会修改才会生效
r = edb.search(
    index=index,
    query={"match_all": {}},
)


def get_search_data(data):
    new_data = []

    # 提取第一层
    hits = r.get("hits")
    if hits is None:
        return new_data

    # 提取第二层
    hits = hits.get("hits")
    if hits is None:
        return new_data

    # 提取第三层
    for hit in hits:
        new_data.append(hit.get("_source"))
    return new_data


print(get_search_data(r))

# 删除索引
edb.indices.delete(index=index)

根据ID删除数据

python 复制代码
import time

from es import Elasticsearch

# 连接es
auth = ("elastic", "zhangdapeng520")
edb = Elasticsearch("http://192.168.234.128:9200/", basic_auth=auth)

# 创建索引
index = "user"
mappings = {
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "text"},
        "age": {"type": "integer"},
    }
}
edb.indices.create(index=index, mappings=mappings)

# 添加数据
data = [
    {
        "id": 1,
        "name": "张三1",
        "age": 23,
    },
    {
        "id": 2,
        "name": "张三2",
        "age": 23,
    },
    {
        "id": 3,
        "name": "张三3",
        "age": 23,
    },
]
new_data = []
for u in data:
    new_data.append({"index": {"_index": index, "_id": f"{u.get('id')}"}})
    new_data.append(u)
edb.bulk(
    index=index,
    operations=new_data,
    refresh=True,
)

# 删除
edb.delete(index=index, id="1")

# 查询数据
time.sleep(1)  # 等一会修改才会生效
r = edb.search(
    index=index,
    query={"match_all": {}},
)


def get_search_data(data):
    new_data = []

    # 提取第一层
    hits = r.get("hits")
    if hits is None:
        return new_data

    # 提取第二层
    hits = hits.get("hits")
    if hits is None:
        return new_data

    # 提取第三层
    for hit in hits:
        new_data.append(hit.get("_source"))
    return new_data


print(get_search_data(r))

# 删除索引
edb.indices.delete(index=index)
相关推荐
kimnoic14 分钟前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna20 分钟前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
必须得开心呀1 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan1 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂2 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师2 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
Wx-bishekaifayuan2 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe2 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码2 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口