Files
bxh/docs/kg-redesign/spatial_kg_design.md

77 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 空间感知知识图谱设计
## 设计结论
城市知识图谱不能只存经纬度。new2 的空间能力采用组合方案:
```text
H3 网格索引 + PostGIS 半径过滤 + 路径规划精排 + KG 语义过滤
```
各层职责:
| 层 | 方法 | 作用 |
|---|---|---|
| 空间组织 | H3 | 把城市切成多分辨率网格,快速召回附近候选 |
| 空间过滤 | PostGIS | 用 `ST_DWithin` 做圆形半径过滤,用 `ST_Distance` 算直线距离 |
| 可达距离 | 高德路径规划 / pgRouting | 计算真实步行、驾车、骑行距离与耗时 |
| 语义推荐 | KG | 结合 Concept、Event、Relation、Evidence 解释为什么推荐 |
## 查询流程
```text
用户经纬度 + 查询半径 + 语义意图
-> 计算用户 H3 cell
-> 取本 cell + 邻居 cells
-> 查询候选 Place
-> PostGIS 过滤圆内 POI
-> 对 topK 调用路径规划
-> 图谱语义过滤和排序
-> 生成可解释回答
```
## 图谱关系
```text
(:Place)-[:IN_CELL {resolution}]->(:GeoCell)
(:GeoCell)-[:PARENT_CELL]->(:GeoCell)
(:GeoCell)-[:ADJACENT_TO]->(:GeoCell)
(:Place)-[:LOCATED_IN]->(:Area)
(:Place)-[:HAS_CONCEPT]->(:Concept)
(:Place)-[:HAS_EVENT]->(:Event)
(:Place)-[:SUPPORTED_BY]->(:Evidence)
```
## 为什么不全量生成 NEAR
如果有 50,000 个 POI两两关系约为
```text
50,000 * 49,999 / 2 = 1,249,975,000
```
全量 `NEAR` 会导致关系爆炸,而且真实路径距离还会随道路、入口、施工、交通方式变化。正确方式是:
```text
常用推荐场景:缓存高价值 route_metrics
实时查询场景H3/PostGIS 先缩小候选,再对 topK 算路径
```
## 旧项目实测结果
旧项目 FalkorDB 中有效 Place/POI 为 24,868 个。测试点为 `106.7135, 26.5744`,半径 1km。
```text
全量扫描中位耗时7.072 ms
H3 召回 + 距离过滤中位耗时0.273 ms
相似度排序中位耗时0.656 ms
H3 覆盖率100%
加速比:约 25.9 倍
```
详见:
- `docs/reports/spatial_retrieval_benchmark_result.md`
- `docs/reports/spatial_kg_recommendation_evidence.png`