我已经设置了一个 Virtuoso 服务器来托管 Freebase 数据(版本 07.20.3217,于 2017 年 1 月 5 日构建;如果你能试一试,我真的很感激)。
?var1
让我们考虑这种情况:在威斯康星州 ( ) 中找到最大的位置(可能是一个县,用 表示fb:m.0824r
),其中?var1
至少包含一个?var2
类型为 的位置(用 表示)fb:place_with_neighborhoods
。
我编写了 SPARQL 查询如下:
PREFIX fb: <http://rdf.freebase.com/ns/>
SELECT DISTINCT ?var1 ?var2 ?v2_name WHERE {
fb:m.0824r fb:location.location.contains ?var1 .
?var1 fb:location.location.contains ?var2 .
?var2 fb:type.object.type fb:location.place_with_neighborhoods .
?var1 fb:location.location.area ?area .
OPTIONAL { ?var2 fb:type.object.name ?v2_name } .
} ORDER BY DESC(?area)
LIMIT 1
不幸的是,Virtuoso 引擎超过一个小时未能返回查询结果。
我尝试了一些更简单的查询,它们可以在不到一秒的时间内产生结果:
PREFIX fb: <http://rdf.freebase.com/ns/>
SELECT DISTINCT ?var1 ?var2 ?v2_name WHERE {
fb:m.0824r fb:location.location.contains ?var1 .
?var1 fb:location.location.contains ?var2 .
?var2 fb:type.object.type fb:location.place_with_neighborhoods .
OPTIONAL { ?var2 fb:type.object.name ?v2_name } .
}
# Remove the area-related information with ?var1
# Returns ONLY ONE result in 0.05s.
和,
PREFIX fb: <http://rdf.freebase.com/ns/>
SELECT DISTINCT ?var1 ?var2 ?v2_name ?area WHERE {
fb:m.0824r fb:location.location.contains ?var1 .
?var1 fb:location.location.contains ?var2 .
?var1 fb:location.location.area ?area .
OPTIONAL { ?var2 fb:type.object.name ?v2_name } .
}
# Remove the type limitation of ?var2
# Returns ~7000 results in ~1s.
鉴于这些简单查询的结果,我真的很困惑哪一步带来了性能问题。有没有人可以给我一些建议?太感谢了!