基于倒排索引和语义向量双索引架构的中文语义检索引擎,支持从 Gitee 同步仓库数据并提供全文搜索功能。系统结合传统倒排索引搜索与基于 text2vec-base-chinese 的语义向量搜索,实现更精准的检索效果。
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │ │ Java Backend │ │ Python Service │
│ (Node.js) │────▶│ (Spring Boot) │────▶│ (FAISS/PyTorch)│
│ Port: 3000 │ │ Port: 80 │ │ Port: 8080 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
┌───────┴───────┐
│ MySQL │
│ search_engine │
└───────────────┘
- 前端发送搜索请求到 Java 后端
/search?query=xxx - Java 后端使用 Jieba 分词进行倒排索引搜索
- Java 后端调用 Python 服务进行语义向量搜索
- 结果取交集后返回给前端
- JDK 17+
- Python 3.8+
- Node.js 16+
- MySQL 8.0+
- Maven 4.0+
- 创建 MySQL 数据库
search_engine,并创建repository表 - 准备倒排索引文件
./inverted_index.dat - 准备向量索引文件到
D:/vector_index/(FAISS 索引 + id_mapping.json) - 下载 text2vec-base-chinese 模型到
D:/ModelScope/text2vec-base-chinese
# 构建
mvn clean package -DskipTests
# 运行(需要 MySQL 正在运行且索引文件存在)
mvn spring-boot:runcd front
npm install
npm start # 运行在 http://localhost:3000cd python
pip install -r requirements.txt
python search_server.py # 运行在 http://localhost:8080├── src/main/java/com/searchengine/ # Java 后端代码
│ ├── controller/ # REST API 控制器
│ ├── service/ # 业务逻辑
│ ├── index/ # 索引相关
│ └── model/ # 数据模型
├── front/ # 前端代码
├── python/ # Python 语义搜索服务
│ ├── search_server.py # 语义搜索 HTTP 服务
│ └── build_vector_index.py # 向量索引构建
└── docs/ # 项目文档
controller/SearchController.java- 搜索 API 端点/searchservice/IndexService.java- 协调倒排索引和语义搜索index/InvertedIndex.java- 倒排索引核心实现(Jieba 分词)index/IndexPersistence.java- 索引序列化/反序列化service/GiteeApiService.java- 从 Gitee API 同步仓库数据
search_server.py- 提供语义向量搜索的 HTTP 服务build_vector_index.py- 从 MySQL 数据构建 FAISS 索引
Repository {
Long id; // 主键
String fullName; // 仓库全名,如 "owner/repo-name"
String htmlUrl; // Gitee 链接
String readme; // README 内容(被索引)
Long repositoryId; // Gitee 仓库 ID
}主要配置文件 src/main/resources/application.yml:
- MySQL 连接配置(localhost:3306/search_engine)
- Gitee API Token 和设置
- 索引文件路径:
./data/index
MIT License