# MemorySearch 忆搜阁 **Repository Path**: deng-2022/memory-search-backend ## Basic Information - **Project Name**: MemorySearch 忆搜阁 - **Description**: 这个项目是一个基于 Spring Boot + Elastic Stack 技术栈 + Vue.js 的聚合搜索中台。它不仅是一个强大的搜索引擎,更是一个内容丰富的社区平台。这个项目的目标是提供一个一站式的搜索、管理和互动体验,满足各种用户需求。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-08-27 - **Last Updated**: 2024-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MemorySearch 忆搜阁 前端代码仓库:[memory-search-frontend](https://gitee.com/deng-2022/memory-search-frontend) ## ☕ 项目概述 这个项目是一个基于 **Spring Boot + Elastic Stack 技术栈 + Vue.js** 的`聚合搜索中台`。它不仅是一个强大的搜索引擎,更是一个内容丰富的社区平台。 这个项目的目标是提供一个**一站式的搜索、管理和互动体验**,满足各种用户需求。 ## 🥘 效果展示 ### 用户登录 ![image-20240222202351543](https://gitee.com/deng-2022/pictures/raw/master/images/image-20240222202351543.png) ### 图片搜索 ![image-20240222203543310](https://gitee.com/deng-2022/pictures/raw/master/images/image-20240222203543310.png) ### 文章上传 ![image-20240222203451920](https://gitee.com/deng-2022/pictures/raw/master/images/image-20240222203451920.png) ### 统计分析 ![image-20240222213338497](https://gitee.com/deng-2022/pictures/raw/master/images/image-20240222213338497.png) ## 🍚 使用场景 - 企业内部多项目数据搜索:该平台能够满足企业内部多个项目的数据搜索需求,避免每个项目都单独开发搜索功能,提升开发效率并降低系统维护成本。 - 多源内容聚合搜索:当需要聚合不同来源、不同类型的内容时,该平台可以提供一站式的搜索页面,便于用户快速查找所需信息,提高工作效率。 - 企业级搜索需求:对于有大规模搜索需求的企业,该平台提供了稳定的、高效的搜索功能,满足企业的搜索需求,并支持数据源接入和管理。 ## 🥣 核心功能与特点 - **高效多元搜索** :用户可以在搜索框中输入关键词,系统会提供快速、准确的搜索结果。搜索结果会根据内容类型(文本、图片、视频)进行分类展示,并提供关键词高亮和搜索建议,使用户能快速找到所需内容。 - **互动创作平台** :用户可以在这个模块中发布文章、上传图片,与其他用户互动。系统会自动推荐热门内容,引导用户发现更多优质内容。用户还可以对文章、图片进行点赞、评论和收藏,形成一个活跃的内容创作社区。 - **流量统计分析** :系统会自动统计每个关键词的搜索流量,并按照时间、关键词类型等维度进行分析。用户可以查看热搜词类别和搜索流量高峰,了解内容趋势和用户行为。 - **个人中心管理** :用户可以在个人中心查看和编辑个人信息,包括头像、昵称、简介等。用户还可以查看自己的点赞、评论和收藏的内容,以及自己创作的文章和下载的图片、视频等。 - **资源全面管理** :这个模块仅对管理员可见,管理员可以对全站资源(文章、图片、视频、用户等)进行全面管理。管理员可以对资源进行添加、删除、修改等操作,保证资源的准确性和完整性。 - **图片预览分享** :通过集成的图片预览功能,用户可以像浏览相册一样查看页面中的图片,并支持缩放和分享到社交媒体平台。 ## 🍜 访问地址 暂未部署上线,点击跳转至:[个人博客 MemorySearch 开发文档](https://deng-2022.gitee.io/blog/2023/08/26/Memory%20%E8%81%9A%E5%90%88%E6%90%9C%E7%B4%A2%E5%B9%B3%E5%8F%B0-%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3/) ## 🍝 架构设计 原图链接:[项目架构图](https://www.yuque.com/huiyiruchu-7jxo6/ckx99i/lxw5okzip8hktuln?singleDoc#) ![image-20240221231907060](https://gitee.com/deng-2022/pictures/raw/master/images/image-20240221231907060.png) ## 🍺 技术选型 ### 后端 - Spring Boot:作为项目的核心框架,提供快速构建 RESTful API 的能力。 - Elasticsearch:作为搜索引擎的核心,提供全文搜索、结构化搜索和推荐等功能。 - Elasticsearch JDBC:用于将关系型数据库中的数据同步到 Elasticsearch 中。 - Spring Data Elasticsearch:提供与 Elasticsearch 的集成,简化 Elasticsearch 操作。 - Logstash:用于日志收集、解析和传输,便于监控和调试。 - Kibana:用于可视化展示 Elasticsearch 中的数据,提供强大的数据分析和可视化功能。 - Mybatis:作为持久层框架,用于操作关系型数据库。 - Redis:作为缓存数据库,提高系统性能。 - Swagger:用于 API 文档的管理和展示。 ### 前端 - Vue.js:作为前端框架,提供响应式设计和组件化开发的能力。 - Element UI:作为 Vue.js 的 UI 组件库,提供丰富的界面元素和样式。 - Axios:用于发送 HTTP 请求,与后端 API 进行交互。 - Vue Router:用于实现前端路由,管理页面跳转。 - Vuex:用于管理前端状态,实现组件之间的数据共享和通信。 - ECharts:用于数据可视化,展示统计图表。 ## 🍰 快速启动 拉取代码后, 如何`快速运行该项目`? ### 后端 - 配置 MySQL、Redis、Elasticsearch 为本机地址: ```yaml # MySQL配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/xxx username: xxx password: xxx ``` ```yaml # Redis 配置 redis: database: 0 host: localhost port: 6379 timeout: 5000 password: Dw990831 ``` ```yaml # ES 配置 elasticsearch: uris: http://localhost:9200 username: root password: 123456 ``` #### 额外安装 - 在本地安装 Elasticsearch、Kibana、Logstash - 在 `ES 的 bin 目录`下执行以下命令,启动 ES: ```bash Elasticsearch.bat ``` - 在 `Kibana 的 bin 目录`下执行以下命令,启动 Kibana: ```bash Kibana.bat ``` - 在 `Logstash 的 config 目录`下新增 .conf 文件,编写配置文件,做好数据映射(以下配置信息可作为参考) ```bash # Sample Logstash configuration for receiving # UDP syslog messages over port 514 input { jdbc { jdbc_driver_library => "D:\softWare\logstash\logstash-7.17.9\config\mysql-connector-java-8.0.29.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/******" jdbc_user => "******" jdbc_password => "******" statement => "SELECT * from post where updateTime > :sql_last_value and updateTime < now() order by updateTime desc" use_column_value => true tracking_column_type => "timestamp" tracking_column => "updatetime" schedule => "*/5 * * * * *" jdbc_default_timezone => "Asia/Shanghai" } } filter { mutate { rename => { "updatetime" => "updateTime" "userid" => "userId" "createtime" => "createTime" "isdelete" => "isDelete" } remove_field => ["thumbnum", "favournum"] } } output { stdout { codec => rubydebug } elasticsearch { hosts => "127.0.0.1:9200" index => "******" document_id => "%{id}" } } ``` - 在 Logstash 的`根目录`下执行以下命令,**加载配置文件并启动 Logstash**: ```bash .\bin\logstash.bat -f .\config\myTask.conf ``` ### 前端 ::: warning 注意 确保本地 `Node.js 环境配置`完成,版本为 `v18.x.x`及以上 ::: - 根据`后端接口文档`,一键生成前端 HTTP 请求接口: > 🍖 官方文档:[ferdikoomen/openapi-typescript-codegen (github.com)](https://github.com/ferdikoomen/openapi-typescript-codegen) 安装: ```bash npm install openapi-typescript-codegen --save-dev ``` 执行命令生成代码: ```bash openapi --input http://localhost:8104/api/v2/api-docs?group=memory-search --output ./generated --client axios ``` - 执行成功后,在 OpenAPI.ts 文件下,修改请求的后端地址: ```ts export const OpenAPI: OpenAPIConfig = { BASE: "http://localhost:8104", VERSION: "1.0", WITH_CREDENTIALS: true, CREDENTIALS: "include", TOKEN: undefined, USERNAME: undefined, PASSWORD: undefined, HEADERS: undefined, ENCODE_PATH: undefined, }; ``` - 执行以下命令,`一键启动`前端项目: ```bash npm run serve ``` ## 🥩 持续优化 随着项目的发展和用户需求的增加,我们将持续优化系统性能,提升用户体验。 加强系统的安全性措施,定期进行安全审计和漏洞扫描,确保用户数据的安全。引入微服务架构将项目向容器化部署发展,确保系统的可扩展性和灵活性。 同时将引入持续集成与部署的流程,实现自动化测试和部署上线,降低运维成本。