3

嗨,有一个查询一直有效到昨天:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX foaf: <http://xmlns.com/foaf/0.1/>
    SELECT DISTINCT(?film_link) ?film_abstract ?film_name ?wikipage
    WHERE {
    ?film_link rdf:type <http://dbpedia.org/ontology/Film> .
    ?film_link rdfs:comment ?film_abstract 
    FILTER (langMatches( lang(?film_abstract), "EN")) .
    ?film_link  foaf:name ?film_name .
    ?film_title foaf:page ?wikipage .

    }

但今天它显示:Virtuoso 42000 错误估计的执行时间 99232592(秒)超过了 1500(秒)的限制。我之前也看到过这个错误,但是当我在运行一段时间后再次运行这样的查询时。任何人都可以解释错误的含义吗?

4

1 回答 1

3

这意味着 Virtuoso 的查询计划器(Virtuoso 是运行 DBPedia 的三重存储)估计了评估您的查询需要多长时间,并且它认为这将花费太长时间,因此它拒绝运行查询。

我怀疑问题是您查询中的最后一个三重模式:

?film_title foaf:page ?wikipage

在此之前您从未使用过这些变量中的任何一个,因此您要求 Virtuoso 做的是foaf:page将谓词位置中每个可能的三元组与查询的其余部分中的结果相乘。

如果您将其更改为以下内容,它应该可以正常工作:

?film_link foaf:page ?wikipage

我怀疑这就是你要写的东西,虽然它仍然很慢,但它仍然有效,因为你的查询非常广泛,而且FILTER子句的评估通常很慢。

于 2011-12-20T00:05:29.940 回答