1

我已经设置了一个 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.

鉴于这些简单查询的结果,我真的很困惑哪一步带来了性能问题。有没有人可以给我一些建议?太感谢了!

4

1 回答 1

2

正如您在项目中提出的问题所述-

当查询的其余部分没有产生解决方案时,似乎存在查询计划问题OPTIONAL,因为从初始查询中仅删除该子句会立即产生结果

删除?var1 fb:location.location.area ?area模式(因此,ORDER BY DESC(?area)),这将解决方案设置为零,同样带来近乎即时的结果

这个问题将向开发部门提出以供他们分析。

于 2018-02-12T03:43:57.423 回答