Быстрый поиск по дате публикации с помощью 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 ответ
Решение
Хитрость заключается в том, чтобы избежать полного сканирования и использовать индексы:
VALUES
:SELECT * WHERE { VALUES (?datetime) {("2018-09-28T00:00:00Z"^^xsd:dateTime)} ?work wdt:P577 ?datetime . } LIMIT 10
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], что данные, к которым обращается запрос для определенного тройного шаблона, строго типизированы, что позволяет применить фильтр диапазона к индексу.