是否可以在Wikidata Query Service的SPARQL中快速查找发布日期以查找某个日期(例如今天)的发布?
我希望这样的查询很快:
SELECT * WHERE {
?work wdt:P577 ?datetime .
BIND("2018-09-28T00:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> as ?now_datetime)
FILTER (?datetime = ?now_datetime)
}
LIMIT 10
但是,在https://query.wikidata.org的SPARQL端点上使用它时,它会超时
范围查询似乎都不是很快。下面的查询将在30秒后返回:
SELECT * WHERE {
?work wdt:P577 ?datetime .
FILTER (?datetime > "2018-09-28T00:00:00Z"^^xsd:dateTime)
}
LIMIT 1
答案 0 :(得分:4)
诀窍是避免完全扫描并使用索引:
SELECT * WHERE {
VALUES (?datetime) {("2018-09-28T00:00:00Z"^^xsd:dateTime)}
?work wdt:P577 ?datetime .
} LIMIT 10
SELECT * WHERE {
VALUES (?datetime) {("2018-09-28T00:00:00Z"^^xsd:dateTime)}
?work wdt:P577 ?date_time .
hint:Prior hint:rangeSafe true .
FILTER (?date_time > ?datetime)
} LIMIT 10
[
rangeSafe
提示]声明对特定三元模式的查询所触及的数据进行了强类型化,因此可以将范围过滤器下推到索引上。