Написание эффективных SPARQL-запросов (MarkLogic) - PullRequest
0 голосов
/ 10 мая 2019

В настоящее время я выполняю различные запросы, и выполнение запроса ниже занимает около 4 минут.Он также проходит через довольно большое количество строк данных (~ 200 млн.).Тем не менее, я хотел бы знать, есть ли какие-либо возможные способы улучшить этот запрос?Я полагаю, что я пытался оптимизировать запрос, переплетая необходимые фильтры перед выполнением следующего прыжка.

Используемый запрос

xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";
import module namespace thsr="http://marklogic.com/xdmp/thesaurus" 
                             at "/MarkLogic/thesaurus.xqy";

let $query := sem:sparql(
'
PREFIX xs: <http://www.w3.org/2001/XMLSchema#>
PREFIX cts: <http://marklogic.com/cts#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema/>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX db: <http://dbpedia.org/resource/>
PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>
PREFIX xdmp: <http://marklogic.com/xdmp#>

SELECT *
WHERE{
?people </posted> ?question .
FILTER (cts:contains(fn:doc(?people), 
  cts:and-query((
    cts:path-range-query("/people_data/dob",">=", xs:dateTime("1980-08-09T10:34:52")),
    cts:path-range-query("/people_data/dob","<=", xs:dateTime("2000-08-09T10:34:52")) 
    ))
)) .
?question </has_tags> ?tags.
FILTER(regex(?tags, ".*doc.*")) .
?question </has_comment> ?comment .
FILTER(cts:contains(fn:doc(?comment), cts:element-word-query(xs:QName("text"), "got"))) .
?commented_by_person </commented> ?comment .
?commented_by_person </dislikes> ?person_disliked .
?person_disliked </from> ?school 
}',
(),
(),
()
)

return (xdmp:elapsed-time())

Любые советы или подсказки будутс благодарностью.

...