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サブクエリのポイントは何ですか? それは単に重複した映画のタイトルを排除しようとしているだけですか? いくつかの重複を受け入れることができる場合、これを削除すると処理が速くなる可能性があります。

第 2 に、このFILTER句では、データベースがすべての可能な一致をスキャンし、可能な一致ごとに式を評価して、それを保持するか破棄するかを決定する必要があります。繰り返しますが、重複したデータを取得しても問題がなく、英語以外の言語のタグを削除してもかまわないFILTER場合は、クエリの実行が速くなる可能性があります。

于 2013-05-03T16:37:01.960 に答える