gpt4 book ai didi

query-optimization - 如何优化我的递归 SPARQL 查询?

转载 作者:行者123 更新时间:2023-12-04 17:10:05 26 4
gpt4 key购买 nike

我正在尝试使用递归 SPARQL 查询从维基数据中提取建筑物,但我一直遇到查询超时。有什么办法可以避免这种情况吗?

这是我当前的查询,选择所有具有 Freebase ID 或 Google 知识图谱 ID 以及荷兰语标签的建筑物:

SELECT DISTINCT ?building ?buildingLabel
WHERE {
?building p:P2671|p:P646 ?id;
p:P31/ps:P31/wdt:P279* wd:Q41176;
rdfs:label ?buildingLabel .
FILTER(LANG(?buildingLabel) = 'nl') .
FILTER (?building != ?buildingLabel) .
}

我曾尝试手动查看几层深度,但出于某种原因,即使确实存在三层或更多层,我也没有得到任何结果。我试过这个:

SELECT ?building
WHERE {
?building p:P31/ps:P31/wdt:P279 [p:P31/ps:P31/wdt:P279 [p:P31/ps:P31/wdt:P279 wd:Q41176]].
}

和使用

SELECT ?building
WHERE {
?parent2 p:P31/ps:P31/wdt:P279 wd:Q41176.
?parent1 p:P31/ps:P31/wdt:P279 ?parent2.
?building p:P31/ps:P31/wdt:P279 ?parent1.
}

维基数据上大约有 224 万座建筑物和大约 1800 万个实体具有 Freebase ID 或 Google 知识图谱 ID。我看过 this guide但不太清楚如何将其应用于我的查询。我还阅读了 this question 的答案但不幸的是,使用多个查询对我来说并不是一个真正的选择。

最佳答案

如果您打算使用“递归”属性路径来查找建筑物类型以及类型的东西,这些类型是建筑物的子类,您的第一个查询使用wdt:P279*是对的,而后来尝试重复完整的 p:P31/ps:P31/wdt:P279模式不会匹配任何数据。

通过稍微简化第一个查询,我能够运行它(在 39 秒内返回 96,297 个结果):

SELECT DISTINCT ?building ?buildingLabel
WHERE {
?building p:P2671|p:P646 ?id;
wdt:P31/wdt:P279* wd:Q41176 .
?building rdfs:label ?buildingLabel .
FILTER(LANGMATCHES(LANG(?buildingLabel), "nl"))
}

两个显着变化:

  • p:P31/ps:P31wdt:P31 取代, 从查询中删除一个连接。
  • 第二个FILTER是不必要的,因为 ?building (一个 URI)和 ?buildingLabel (一个字符串)必然会不相等

关于query-optimization - 如何优化我的递归 SPARQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69648621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com