Page 170 - 《软件学报》2026年第3期
P. 170
刘孟怡 等: 基于大语言模型的空间数据库自然语言查询转换方法 1133
与查询地点边界矩形框相交的对象, 初步筛选出候选子集. 最后对候选子集使用 intersects 运算符, 进行精确的空
间交集计算, 确定与查询地点真实相交的对象.
query tmp_rtree road windowintersects [bbox(road feed filter [.Name = “Zhixing Road”] extract[GeoData])] filter
[.GeoData intersects (road feed filter [.Name = “Zhixing Road”] extract[GeoData])] consume;
案例 2: Can you tell me the total area of the districts of Nanjing intersecting with the Yangtze River Basin?
自然语言理解阶段得到的类型为统计总和的聚合查询, 空间关系为 district, 查询地点为 Yangtze River Basin.
基于映射规则, 将关键实体信息映射到结构化语言模型中, 生成可执行语言为:
query district feed extend [IntersectionArea: area(intersection(.GeoData, Yangtze River Basin))] sum [IntersectionArea];
接下来进行查询优化, 先为空间关系创建 R 树索引.
derive tmp_rtree = district creatertree[GeoData];
然后使用 bbox 和 windowintersects 运算符得到候选子集. 最后使用 intersection 运算符精确计算候选子集中
每个对象与查询地点相交的部分, 使用 area 运算符计算相交部分的面积, 使用 sum 运算符对所有相交面积进行汇
总, 得到总面积.
query tmp_rtree district windowintersects [ bbox(Yangtze River Basin)] extend [IntersectionArea: area ( intersection
(.GeoData, Yangtze River Basin))] sum [IntersectionArea];
案例 3: Please find the POIs in each district that are located within a 15-minute walk of a university.
该查询可用于支持城市规划与公共服务评估任务, 帮助相关部门分析高校周边约 1 000 m (按平均步行速度
4 km/h 估算的 15 min 步行距离) 范围内的商业、生活及文化设施的空间分布情况, 进而评估高校是否处于功能完
备的区域. 这类信息对于大学城发展规划、教育产业园区选址以及服务资源均衡配置具有重要参考价值. 自然语
言理解阶段得到的类型为空间 Join 查询, 空间关系为 poi、district 和 university, 距离阈值为 1 000, poi 和 district
之间的连接条件为包含关系, poi 和 university 之间的连接条件为距离约束 “within a 15-minute walk”. 基于映射规
则, 将关键实体信息映射到结构化语言模型中, 生成以下两个候选可执行查询.
EXE1: query poi feed {a} university feed {b} symmjoin [distance(.GeoData_a, ..GeoData_b) <= 1000.0] district
feed {c} symmjoin [.GeoData_a within ..GeoData_c] consume;
EXE2: query poi feed {a} district feed {b} symmjoin [.GeoData_a within ..GeoData_b] university feed {c}
symmjoin [distance(.GeoData_a, ..GeoData_c) <= 1000.0] consume;
上述两个查询在语义上等价, 但在执行顺序上存在差异. 为了优化查询性能, 系统对两个候选查询进行代价估
算, 主要依据第 1 次连接后的中间结果规模和第 2 次连接时的计算开销. 具体估算如下.
Cost EXE1 = |poi ⋈ university| × (1 + |district|),
Cost EXE2 = |poi ⋈ district| × (1 + |university|).
通过实际数据库中的查询执行结果可得 |poi ⋈ university| = 397, |poi ⋈ district| = 1000, |district| = 11, |university| =
89, 进而计算得到 Cost EXE1 = 4764, Cost EXE2 = 90000. 由于 Cost EXE1 < Cost EXE2 , 系统最终选择 EXE1 作为最优可执
行查询返回给用户.
5 实验分析
在一台运行 Ubuntu 20.04 (64 位, 内核版本 5.14.0-1051-oem) 的电脑 (Intel(R) Core(TM) i5-10210U CPU, 1.60 GHz,
8 GB 内存, 512 GB 硬盘) 上对 NALSpatial 进行开发并进行实验评估. 在 SECONDO 系统中以代数模块的形式实
现了 NALSpatial, 并通过该代数实现一个运算符, 名为 spatial_nl. 用户可以在 SECONDO 数据库上使用运算符
spatial_nl 将空间数据的自然语言查询转换为可执行语言.
5.1 数据集与评估指标
● 数据集. 使用 berlintest、nanjingtest、londontest 和 chinawater 数据集, 空间数据统计如表 4 所示. berlintest

