# 搜索架构实验室

这个项目先用一个内存搜索引擎解释倒排索引、BM25、过滤、聚合和 `search_after`，再提供 Spring Boot HTTP 接口和真实 Elasticsearch 9.5.0 本地环境。原理测试不依赖 Docker。

## 运行原理测试

安装 JDK 21 与 Maven 3.9+，执行：

```bash
mvn test
```

启动本地搜索 API：

```bash
mvn spring-boot:run
curl 'http://localhost:8080/products/search?q=java&category=book'
```

## 启动真实 Elasticsearch

```bash
docker compose up -d --wait
curl http://localhost:9200
```

Kibana 地址为 `http://localhost:5601`。实验为降低入门成本关闭了安全功能，只能在本机使用，不能复制到生产。

停止容器但保留数据：

```bash
docker compose down
```

只有确定不再需要实验索引时，才运行 `docker compose down -v` 删除数据卷。

## 文件导航

- `MiniSearchEngine.java`：倒排索引、BM25、过滤、聚合和游标分页。
- `ChangeProjector.java`：按版本投影 MySQL CDC 事件。
- `LogSanitizer.java`：日志字段白名单与敏感值脱敏。
- `ProductSearchController.java`：可运行的 Spring Boot 搜索接口。
