在xyy_branch分支的doc文件夹中添加markdown文档

xyy_branch
薛永宇 7 months ago
parent f84673a4b4
commit 3db736cdba

@ -0,0 +1,46 @@
一、系统整体架构
该音乐搜索系统后端基于 Flask 框架构建,采用了多层架构设计,集成了数据爬取、存储、搜索与展示等核心功能,同时通过 RESTful API 与前端进行交互。系统主要涉及以下关键组件:
数据爬取层:通过 UnifiedMusicCrawler 类实现对音乐数据的爬取,支持按关键词、分类、艺术家等多种维度获取音乐信息。
数据存储层:使用 Neo4j 图数据库存储音乐实体(歌曲、艺术家、专辑等)及其关系,同时利用 Elasticsearch 实现高效的全文搜索与数据统计。
业务逻辑层:封装了数据爬取、存储、搜索的核心逻辑,通过各类方法对外提供统一的操作接口。
API 层:基于 Flask 定义了丰富的 RESTful API支持前端页面的各种交互需求如搜索、数据统计、关系查询等。
二、核心模块与功能
数据爬取模块UnifiedMusicCrawler
UnifiedMusicCrawler 是统一的数据爬取入口,负责从外部源获取音乐数据,主要功能包括:
通用爬取crawl_massive_data(count) 方法可批量爬取指定数量的音乐数据search_songs(keyword, limit) 支持按关键词搜索音乐。
分类爬取crawl_by_category() 能按音乐类别进行爬取,丰富数据的多样性。
艺术家定向爬取search_songs(artist, count) 可针对特定艺术家爬取其相关歌曲。
(二)数据存储模块
1. Neo4j 图数据库MusicGraphDatabase
用于存储音乐实体及它们之间的关系,核心功能有:
实体管理:提供 add_songs_batch(songs) 批量添加歌曲get_popular_artists(limit) 获取热门艺术家等方法,管理歌曲、艺术家、专辑等实体。
关系管理:通过 attach_album_by_name_artist 建立歌曲与专辑的关系get_related_songs(song_id) 获取歌曲的相关歌曲,利用图数据库的特性高效处理实体间的关联。
统计查询get_statistics() 可获取数据库中的歌曲、艺术家、专辑等统计信息。
2. Elasticsearch 搜索引擎MusicSearchEngine
专注于全文搜索与数据统计,主要功能:
全文搜索:支持多字段(歌曲名、艺术家、专辑、歌词、标签等)的短语精确匹配与模糊匹配,如 search_by_artist(name, size) 按艺术家搜索歌曲。
数据统计get_statistics() 获取索引的文档总数等统计信息get_genre_count() 统计音乐流派分布get_distinct_count(field) 统计指定字段(如艺术家、专辑)的不同值数量。
热门数据get_popular_songs(limit) 可获取热门歌曲列表。
API 接口模块
基于 Flask 定义了大量 API覆盖搜索、数据统计、关系查询、系统管理等场景部分关键 API 如下:
搜索相关:/api/search 支持多类型(歌曲、艺术家、专辑、歌词等)的全文搜索,优先短语精确匹配,再补充模糊匹配,还会结合 Neo4j 数据进行结果补充与去重。
数据统计:/api/stats 聚合 Neo4j 和 Elasticsearch 的统计数据,返回系统中的歌曲、艺术家、专辑总数等信息;/api/analytics/genre-stats 提供音乐类型的统计分布。
实体关系:/api/graph/related/<song_id> 获取歌曲的相关歌曲;/api/song/<song_id>/relationships 获取歌曲的关系图数据。
系统管理:/api/init 初始化系统,创建数据库约束并批量爬取数据;/api/admin/reset 清空数据库与索引,可选重建与爬取。
三、技术亮点与设计思路
(一)多数据源协同
系统同时使用 Neo4j 和 Elasticsearch发挥各自优势
Neo4j 擅长处理实体间的复杂关系,适合存储歌曲、艺术家、专辑之间的关联,便于进行关系型查询(如获取相关歌曲、艺术家的歌曲列表)。
Elasticsearch 则在全文搜索和数据统计方面表现出色,能快速响应多字段的模糊搜索、短语匹配以及各类数据聚合统计需求。
(二)数据流转与整合
数据从爬取模块获取后,会同时存入 Neo4j 和 Elasticsearch保证了数据在关系存储和搜索统计两个维度的可用性。例如爬取的歌曲数据会通过 add_songs_batch 存入 Neo4j通过 index_songs_batch 索引到 Elasticsearch。
(三)自动化与健壮性
自动爬取通过启动后台线程按照指定时间间隔AUTO_CRAWL_INTERVAL 配置)自动批量爬取数据,保证数据的实时性与丰富度。
异常处理:在关键方法(如爬取、存储、搜索)中都添加了异常捕获与处理,返回友好的错误信息,提升系统的健壮性。
(四)测试友好性
通过 IS_TEST_MODE 变量控制测试模式下的提示输出,便于在测试环境中查看关键操作的日志信息,如爬取、入库的提示。
四、依赖与环境配置
依赖库FlaskWeb 框架、Flask-CORS跨域支持、neo4j图数据库驱动、elasticsearch搜索引擎驱动等。
环境变量:可通过 PYTEST_CURRENT_TEST、UNIT_TEST 控制测试模式AUTO_CRAWL_INTERVAL 配置自动爬取的时间间隔。
五、总结
该音乐搜索系统后端代码结构清晰,模块职责明确,充分利用了 Neo4j 和 Elasticsearch 的技术特性,实现了高效的音乐数据管理、搜索与统计功能。同时,通过自动化爬取、完善的异常处理和测试友好的设计,保证了系统的实用性、健壮性与可维护性,能很好地支撑前端页面的各类交互需求。

@ -1 +0,0 @@
"# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"

@ -1 +0,0 @@
"# 代码质量分析报告"
Loading…
Cancel
Save