Быстрый поиск по дате публикации с помощью Wikidata Query Service - PullRequest
0 голосов
/ 28 сентября 2018

Есть ли способ быстрого поиска дат публикации в 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 Ответ

0 голосов
/ 28 сентября 2018

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

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

...