gpt4 book ai didi

optimization - 优化SPARQL查询

转载 作者:行者123 更新时间:2023-12-03 17:36:13 25 4
gpt4 key购买 nike

我昨天开始自学SPARQL,并且正在练习dbpedia。我正在尝试检索在指定目的地附近(即斯旺西和牛津)附近的两家具乐部参加比赛的所有足球运动员的名单。我有以下查询,该查询有效,但速度很慢:

SELECT ?player ?team ?team2
WHERE
{
:Swansea geo:geometry ?point1_1 .
?team dbpedia-owl:ground ?ground .
?ground geo:geometry ?point1_2 .
FILTER (bif:st_distance( ?point1_1, ?point1_2) < 5)
?player dbpedia2:clubs ?team .

:Oxford geo:geometry ?point2_1 .
?team2 dbpedia-owl:ground ?ground2 .
?ground2 geo:geometry ?point2_2 .
FILTER (bif:st_distance( ?point2_1, ?point2_2) < 5)
?player dbpedia2:clubs ?team2 .
}


我的问题是,在dbpedia的查询页面上运行时,查询经常超时(请参见 http://tinyurl.com/d9pkluq)。有什么方法可以优化此查询?如果我输入更多的城镇,或指定更大的半径进行搜索,我仍然希望它在dbpedia的查询页面中运行而不会超时。

感谢您的任何帮助,您可以提供!

最佳答案

您的查询是完全有效的查询,并且在理想情况下,处理您的查询的SPARQL查询引擎将以最佳方式运行。但是,许多SPARQL实现还没有很好的查询优化器,因此您通常必须自己优化查询。通常,您可以通过对查询的各个部分进行重新排序来完成此操作。

一种常见的技术是尝试对查询中的图形模式进行排序,以便尽快减少查询结果的数量。请记住,每个图形模式都将与先前模式的每个匹配相对应。您可以将查询视为一系列嵌套循环。您要避免在内部循环中执行大量操作。

在您的查询示例中,您可以例如按以下方式对其进行重新排序:

SELECT ?player ?team ?team2
WHERE
{
:Swansea geo:geometry ?point1_1 .
?team dbpedia-owl:ground ?ground .
?ground geo:geometry ?point1_2 .
FILTER (bif:st_distance( ?point1_1, ?point1_2) < 5)
?player dbpedia2:clubs ?team .

?player dbpedia2:clubs ?team2 .
FILTER(?team != ?team2)

:Oxford geo:geometry ?point2_1 .
?team2 dbpedia-owl:ground ?ground2 .
?ground2 geo:geometry ?point2_2 .
FILTER (bif:st_distance( ?point2_1, ?point2_2) < 5)
}


因此,与其寻找另一个城镇以及城镇,俱乐部和球员的潜在大量组合,不如将其局限于只对那些“感兴趣”的球员参加的球队,从而限制了您选择的第二支球队的选择。我还添加了一项检查,以避免它与 ?team?team2的同一团队匹配。

我不能肯定地说这是否会使您的情况更好,这在很大程度上取决于您所针对的确切DBPedia端点。但这是您可以尝试的一种优化。

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

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