2

我想获取 dbpedia 上所有电影的数据(电影名称、导演姓名、演员姓名和维基百科链接)。

我在http://dbpedia.org/snorql/上尝试了这个查询。

SELECT ?film_title ?star_name ?nameDirector ?link WHERE {
  {  
    SELECT DISTINCT ?movies ?film_title
    WHERE {
       ?movies rdf:type <http://dbpedia.org/ontology/Film>; 
       rdfs:label ?film_title.
    } 
  }. 
  ?movies dbpedia-owl:starring ?star;
  foaf:isPrimaryTopicOf ?link;
  dbpedia-owl:director ?director. 
  ?director foaf:name ?nameDirector.
  ?star foaf:name ?star_name.
  FILTER LANGMATCHES( LANG(?film_title), 'en')
} LIMIT 100

响应似乎是正确的,但响应时间很慢,所以我想知道是否可以改进我的查询以获得更快的响应。

4

1 回答 1

0

您可以在查询中进行一些更改,以使其更快。

首先,您的SELECT DISTINCT子查询有什么意义?这仅仅是试图消除重复的电影片名吗?如果您可以忍受一些重复,则删除它可能会使事情变得更快。

其次,这些FILTER子句要求数据库扫描所有可能的匹配并评估每个可能匹配的表达式以确定是保留还是丢弃它。同样,如果您可以忍受获取一些重复数据并且不介意删除非英语语言标签FILTER可能会使查询运行得更快。

于 2013-05-03T16:37:01.960 回答