当前位置: 首页 > wzjs >正文

弹出全屏视频网站怎么做杭州思拓网站建设

弹出全屏视频网站怎么做,杭州思拓网站建设,做网站一年赚多少钱,网站搭建系统好的,从 pymysql (操作关系型数据库如 MySQL) 切换到 Elasticsearch (ES) 会有一些概念上的转变,但核心的增删改查 (CRUD) 思想是相通的。下面我将为你提供一个教程,并尽量用你熟悉的 SQL 概念进行类比。 核心概念类比 Elasticsearch 概念S…

好的,从 pymysql (操作关系型数据库如 MySQL) 切换到 Elasticsearch (ES) 会有一些概念上的转变,但核心的增删改查 (CRUD) 思想是相通的。下面我将为你提供一个教程,并尽量用你熟悉的 SQL 概念进行类比。

核心概念类比

Elasticsearch 概念SQL 概念解释
Index (索引)Database (数据库) 或 Table (表)ES 中的 Index 更常被类比为 SQL 中的 Table。它是相关文档的集合。虽然一个 ES 集群可以有多个 Index,类似于一个数据库服务器可以有多个 Database,但在 CRUD 操作层面,Index 更像 Table。
Document (文档)Row (行)ES 中存储的基本单位,以 JSON 格式表示。
_id (文档ID)Primary Key (主键)文档的唯一标识符。
Mapping (映射)Schema (表结构)定义 Index中文档的字段类型和属性。ES可以动态推断类型,但也支持显式定义。
Fields (字段)Columns (列)Document 中的键值对。

准备工作:安装 Elasticsearch Python 客户端

首先,你需要安装官方的 Elasticsearch Python 客户端:

pip install elasticsearch

连接到 Elasticsearch

pymysql.connect() 类似,你需要先连接到你的 ES 服务。

from elasticsearch import Elasticsearch# 假设你的 Elasticsearch 服务运行在本地 localhost:9200
# 如果有用户名和密码认证:
# es = Elasticsearch(
# cloud_id="YOUR_CLOUD_ID", # 如果使用 Elastic Cloud
# api_key="YOUR_API_KEY" # 或者 http_auth=('user', 'password')
# )
# 对于本地或无密码认证的实例:
try:es = Elasticsearch(['http://localhost:9200'])if es.ping():print("成功连接到 Elasticsearch!")else:print("无法连接到 Elasticsearch!")
except ConnectionRefusedError:print("连接被拒绝,请确保 Elasticsearch 服务正在运行并且地址正确。")
except Exception as e:print(f"连接时发生错误: {e}")# 后续操作都需要这个 'es' 对象

增 (Create / Indexing) - 插入数据

在 ES 中,“创建”一个新文档通常称为 Indexing (索引)。如果你提供 _id,并且该 _id 已存在,则会更新现有文档(除非显式指定为创建操作)。如果不提供 _id,ES 会自动生成一个。

类比 SQL 的 INSERT

-- SQL
INSERT INTO users (id, name, age) VALUES (1, '张三', 30);
INSERT INTO logs (message, timestamp) VALUES ('User logged in', '2025-05-19T10:00:00'); -- 无主键,数据库自动生成

Elasticsearch Python 实现:

# 1. 插入一个带有指定 ID 的文档
doc1 = {"name": "张三", "age": 30, "email": "zhangsan@example.com"}
try:response = es.index(index="my_users", id="user1", document=doc1) # 'my_users' 是 Index 名称print(f"文档 'user1' 索引成功: {response['result']}") # result 会是 'created' 或 'updated'
except Exception as e:print(f"索引文档 'user1' 失败: {e}")# 2. 插入一个不指定 ID 的文档 (ES 自动生成 ID)
doc2 = {"message": "User logged in", "timestamp": "2025-05-19T10:00:00Z"}
try:response = es.index(index="my_logs", document=doc2) # 'my_logs' 是 Index 名称generated_id = response['_id']print(f"文档索引成功,自动生成 ID: {generated_id}, 结果: {response['result']}")
except Exception as e:print(f"索引文档失败: {e}")# 强制创建 (如果 ID 已存在则会报错)
doc3 = {"name": "李四", "age": 25}
try:# op_type="create" 表示如果 id 已存在,则操作失败response = es.create(index="my_users", id="user2", document=doc3)print(f"文档 'user2' 创建成功: {response['result']}")
except elasticsearch.ConflictError:print(f"创建文档 'user2' 失败: 文档已存在。")
except Exception as e:print(f"创建文档 'user2' 失败: {e}")

关键点:

  • index="your_index_name": 指定要在哪个 Index 中操作,类似于 SQL 中的表名。如果 Index 不存在,ES 通常会自动创建它(根据配置)。
  • id="your_document_id": 可选,指定文档的 _id
  • document=your_document_data: 要插入的文档内容,是一个 Python 字典。
  • es.index() 是最常用的方法,兼具创建和更新功能。
  • es.create() 仅用于创建,如果文档ID已存在则会失败。

查 (Read / Get / Search) - 查询数据

ES 的查询功能非常强大,远超 SQL 的 SELECT

1. 按 ID 获取文档 (类似于 SELECT ... WHERE id = ...)

-- SQL
SELECT * FROM users WHERE id = 'user1';

Elasticsearch Python 实现:

try:response = es.get(index="my_users", id="user1")if response['found']:print("根据 ID 获取文档成功:")print(response['_source']) # '_source' 包含了文档的实际内容else:print("未找到文档 'user1'")
except elasticsearch.NotFoundError:print("文档 'user1' 未找到。")
except Exception as e:print(f"获取文档 'user1' 失败: {e}")

2. 搜索文档 (类似于 SELECT ... WHERE condition ...)

ES 使用一种称为 Query DSL (Domain Specific Language) 的 JSON 结构来定义复杂的搜索查询。

简单示例:查询 my_users 索引中 name 字段为 “张三” 的所有用户。

-- SQL (简单类比)
SELECT * FROM users WHERE name = '张三';

Elasticsearch Python 实现 (使用 Match Query):

search_query_simple = {"query": {"match": {"name": "张三" # 查询 name 字段中包含 "张三" 的文档}}
}try:response = es.search(index="my_users", body=search_query_simple)print(f"搜索到 {response['hits']['total']['value']} 个文档:")for hit in response['hits']['hits']:print(f"  ID: {hit['_id']}, Score: {hit['_score']}, Source: {hit['_source']}")
except Exception as e:print(f"搜索文档失败: {e}")# 更复杂的示例:查询 age 大于 28 的用户
search_query_range = {"query": {"range": {"age": {"gt": 28 # gt = greater than}}}
}
try:response = es.search(index="my_users", body=search_query_range)print(f"\n搜索年龄大于 28 的用户,共 {response['hits']['total']['value']} 个:")for hit in response['hits']['hits']:print(f"  ID: {hit['_id']}, Source: {hit['_source']}")
except Exception as e:print(f"范围搜索失败: {e}")# 获取所有文档 (类似于 SELECT * FROM table,但不推荐用于大数据量)
try:# 注意:对于非常大的索引,避免使用 match_all 不加分页或限制# 这里可以添加 size 参数来限制返回数量,例如 size=10response_all = es.search(index="my_users", query={"match_all": {}}, size=10)print(f"\n获取 'my_users' 索引中的前10个文档 (或所有,如果少于10个):")for hit in response_all['hits']['hits']:print(f"  ID: {hit['_id']}, Source: {hit['_source']}")
except Exception as e:print(f"获取所有文档失败: {e}")

关键点:

  • es.get(): 通过 _id 精确获取单个文档。
  • es.search(): 执行搜索查询。
  • bodyquery 参数: 包含用 Query DSL 定义的查询体。
  • Query DSL 非常灵活,支持全文搜索、布尔查询、范围查询、聚合等。你需要花时间学习它。

改 (Update) - 更新数据

更新文档可以通过 es.update() 方法,或者用 es.index() 覆盖(如果 _id 已存在)。es.update() 更灵活,可以部分更新文档。

类比 SQL 的 UPDATE

-- SQL
UPDATE users SET age = 31, city = '北京' WHERE id = 'user1';

Elasticsearch Python 实现:

# 1. 部分更新文档 (只更新指定字段)
update_body_partial = {"doc": { # "doc" 关键字表示部分更新"age": 31,"city": "北京"}
}
try:response = es.update(index="my_users", id="user1", body=update_body_partial)print(f"文档 'user1' 部分更新成功: {response['result']}")
except elasticsearch.NotFoundError:print(f"更新失败:文档 'user1' 未找到。")
except Exception as e:print(f"更新文档 'user1' 失败: {e}")# 2. 使用脚本更新 (例如,给年龄增加1)
update_body_script = {"script": {"source": "ctx._source.age += params.increment", # ctx._source 指向文档内容"lang": "painless", # ES 默认的脚本语言"params": {"increment": 1}}
}
try:# 假设 user1 之前年龄是 31, 更新后会是 32response = es.update(index="my_users", id="user1", body=update_body_script)print(f"文档 'user1' 通过脚本更新成功: {response['result']}")# 验证更新updated_doc = es.get(index="my_users", id="user1")print(f"更新后的文档 'user1': {updated_doc['_source']}")
except elasticsearch.NotFoundError:print(f"脚本更新失败:文档 'user1' 未找到。")
except Exception as e:print(f"脚本更新文档 'user1' 失败: {e}")# 3. 通过 index API "覆盖" 更新 (整个文档替换)
# 如果 user1 存在,这会完全替换它的内容
doc_override = {"name": "张三丰", "age": 100, "skill": "太极"}
try:response = es.index(index="my_users", id="user1", document=doc_override)print(f"文档 'user1' 通过 index API 覆盖更新成功: {response['result']}") # result 会是 'updated'
except Exception as e:print(f"通过 index API 覆盖更新 'user1' 失败: {e}")

关键点:

  • es.update(): 用于部分更新或使用脚本更新。
    • body={"doc": {"field_to_update": "new_value"}}: 部分更新。
    • body={"script": ...}: 使用脚本更新,更灵活。
  • es.index(): 如果 _id 已存在,它会完全替换现有文档。

删 (Delete) - 删除数据

类比 SQL 的 DELETE

-- SQL
DELETE FROM users WHERE id = 'user2';

Elasticsearch Python 实现:

try:response = es.delete(index="my_users", id="user2")if response['result'] == 'deleted':print(f"文档 'user2' 删除成功.")elif response['result'] == 'not_found':print(f"删除失败:文档 'user2' 未找到。")else:print(f"删除文档 'user2' 的结果: {response['result']}")
except elasticsearch.NotFoundError:print(f"删除失败:文档 'user2' 未找到。")
except Exception as e:print(f"删除文档 'user2' 失败: {e}")# 验证删除
try:es.get(index="my_users", id="user2") # 应该会抛出 NotFoundError
except elasticsearch.NotFoundError:print("文档 'user2' 已被成功删除,验证通过。")
except Exception as e:print(f"验证删除时发生错误: {e}")

删除整个 Index (类似于 DROP TABLE)
警告:这个操作会删除 Index 内的所有数据且不可恢复!

# 谨慎操作!
try:# 假设我们想删除 my_logs 这个 indexif es.indices.exists(index="my_logs"):es.indices.delete(index="my_logs")print("Index 'my_logs' 删除成功。")else:print("Index 'my_logs' 不存在,无需删除。")
except Exception as e:print(f"删除 Index 'my_logs' 失败: {e}")

pymysql 的主要区别和 ES 特点

  1. Schema (结构):

    • MySQL: Schema-on-write (写时定义结构)。在插入数据前必须定义表结构和字段类型。
    • Elasticsearch: Schema-on-read (读时推断结构) 或 Schema-free (更准确的说是动态映射)。ES 可以根据你插入的第一个文档动态创建 Mapping (映射,即表结构)。你也可以预先定义 Mapping 以获得更精确的控制。这提供了更大的灵活性。
  2. 数据类型:

    • MySQL 有固定的数据类型 (INT, VARCHAR, TEXT, DATETIME 等)。
    • ES 也有丰富的字段类型 (text, keyword, date, long, double, boolean, object, nested 等),特别为全文搜索和分析优化。例如 text 类型会进行分词处理以支持模糊搜索,而 keyword 类型则不分词,用于精确匹配、排序和聚合。
  3. 查询语言:

    • MySQL: SQL (Structured Query Language),声明式语言。
    • Elasticsearch: Query DSL (基于 JSON),非常强大和灵活,专为搜索和分析设计。学习曲线比 SQL 陡峭一些,但功能更强大。
  4. 事务 (Transactions):

    • MySQL: 支持 ACID 事务,保证数据一致性。
    • Elasticsearch: 本质上是分布式的,不支持传统意义上的跨多个文档的 ACID 事务。它在单个文档级别保证原子性。对于需要复杂事务的场景,ES 可能不是最佳选择。
  5. 主要用途:

    • MySQL: 适合作为 OLTP (在线事务处理) 系统,结构化数据存储,关系型数据管理。
    • Elasticsearch: 强大的搜索引擎,日志分析,实时数据分析,地理空间数据搜索等。它非常擅长处理大量非结构化或半结构化数据,并提供快速的搜索和聚合能力。
  6. API:

    • pymysql 通过 Python DB-API 规范与 MySQL 交互。
    • Elasticsearch Python 客户端通过 HTTP/HTTPS 与 ES 的 REST API 进行通信。ES 的所有操作都是通过 RESTful API 暴露的。

总结和建议

  • 从小处着手: 先掌握基本的 index, get, search (match query), update, delete 操作。
  • 学习 Query DSL: 这是发挥 ES强大搜索能力的关键。官方文档是最好的学习资源。
  • 理解 Mapping: 了解不同字段类型 (text vs keyword 非常重要) 如何影响搜索和聚合。
  • 考虑数据建模: 虽然 ES 灵活,但好的数据建模(如何组织 Index 和 Document)仍然重要。

希望这个教程能帮助你顺利上手 Elasticsearch!如果你在实践中遇到具体问题,可以随时提问。


文章转载自:

http://k1tiQrPE.rkwjs.cn
http://JmjzbH3x.rkwjs.cn
http://HmohJM26.rkwjs.cn
http://URFvHldc.rkwjs.cn
http://DTb5z027.rkwjs.cn
http://912usGmg.rkwjs.cn
http://tL5QF21d.rkwjs.cn
http://sIdTJTI6.rkwjs.cn
http://1r5487WH.rkwjs.cn
http://yfed6c3a.rkwjs.cn
http://xtnJ3cFv.rkwjs.cn
http://PbywK1WZ.rkwjs.cn
http://MlxUegbW.rkwjs.cn
http://G94oYaj5.rkwjs.cn
http://UhiWuiFs.rkwjs.cn
http://DV2YRWXw.rkwjs.cn
http://UHPljFvi.rkwjs.cn
http://7oUQM9S8.rkwjs.cn
http://sAGCgoH8.rkwjs.cn
http://FXTiteIV.rkwjs.cn
http://qsOEBtES.rkwjs.cn
http://FbxMf7NN.rkwjs.cn
http://VYY9Mn2V.rkwjs.cn
http://BsqSEwlt.rkwjs.cn
http://I7gHzPgb.rkwjs.cn
http://4lNeo5oj.rkwjs.cn
http://40O1sswv.rkwjs.cn
http://miV4mkgM.rkwjs.cn
http://mYjFmh4L.rkwjs.cn
http://2zj3R52U.rkwjs.cn
http://www.dtcms.com/wzjs/757291.html

相关文章:

  • 杭州企业网站建设建设网站行业云
  • 广州市研发网站建设价格wordpress frame主题
  • 汕头制作网站推荐天津产品设计公司
  • 网站建设费用属于管理费用科目网页数据库怎么搭建
  • 吉林省软环境建设办公室网站上海做外贸网站建设
  • 厦门外贸网站建设公司莱芜网络推广公司排行
  • 广元市网站建设怎么看网站被惩罚
  • 一键提交网站淘宝做图片的网站
  • 咸阳市网站开发wordpress徽章
  • 中山祥云网站建设明年做哪个网站致富
  • 江西网站搜索引擎优化wordpress sql注入
  • 苏宁易购网站风格嘉兴网站排名公司
  • 网站建设策划包括哪些内容最好的看vr影片的设备
  • 做投资要关注哪些网站百度网站怎么用
  • 做网站开发很赚钱吗急招工地土建施工员
  • 制作好网站怎么导入济南营销型网站
  • 网站建设包括啥机关单位建设网站 说明
  • 网站版权 备案icp中文门户网站有哪些
  • 乔拓云智能建站免费注册工信部企业网站备案吗
  • 齐大胜请于果做网站是第几集做网站开发有哪些优点呢
  • 瀑布流 网站 php 源码建个企业营销型网站
  • 沟通交流类网站有哪些精装房软装设计公司
  • 免费直播网站开发无网站网络营销
  • tp5企业网站开发中山网站设计收费标准
  • 网站怎么创建内容wordpress美化编辑插件
  • 程序网站开发html代码雨
  • 好的网站分享如何在网站上做网上亮照
  • 重庆所有做网站的公司有哪些建设银行网站名称怎么写
  • 营销网站建设是什么意思潍坊免费网站制作
  • 网站制作赚钱吗网站策划做啥