Быстрый поиск по дате публикации с помощью Wikidata Query Service

Есть ли способ быстро найти даты публикации в SPARQL Сервиса запросов Wikidata, чтобы найти публикации определенной даты, например, сегодня?

Я надеялся, что что-то вроде этого запроса будет быстрым:

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 ответ

Решение

Хитрость заключается в том, чтобы избежать полного сканирования и использовать индексы:

  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], что данные, к которым обращается запрос для определенного тройного шаблона, строго типизированы, что позволяет применить фильтр диапазона к индексу.

Другие вопросы по тегам