代码之家  ›  专栏  ›  技术社区  ›  Finn Årup Nielsen Mazdak

使用Wikidata查询服务快速查找发布日期

  •  4
  • Finn Årup Nielsen Mazdak  · 技术社区  · 6 年前

    有没有一种方法可以在Wikidata查询服务的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
    

    但是,在SPARQL端点上使用它时,它会超时 https://query.wikidata.org

    范围查询似乎既不快速。以下查询在大约30秒后返回:

    SELECT * WHERE {
      ?work wdt:P577 ?datetime .
      FILTER (?datetime > "2018-09-28T00:00:00Z"^^xsd:dateTime)
    }
    LIMIT 1
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Stanislav Kralin kenwenzel    6 年前

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

    1. VALUES

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

      Try it!

    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
      

      Try it!

      [第 rangeSafe