4

有没有办法在 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
4

1 回答 1

4

诀窍是避免完全扫描和使用索引:

  1. VALUES

    SELECT * WHERE {
      VALUES (?datetime) {("2018-09-28T00:00:00Z"^^xsd:dateTime)}
      ?work wdt:P577 ?datetime .
    } LIMIT 10
    

    尝试一下!

  2. hint:rangeSafe

    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提示] 声明 [s] 特定三元组模式的查询所触及的数据是强类型的,因此允许将范围过滤器下推到索引上。

于 2018-09-28T08:31:31.333 回答