编写高效的SPARQL查询(MarkLogic)

时间:2019-05-10 08:57:09

标签: marklogic

我当前正在运行各种查询,下面的查询大约需要4分钟才能完成。它还运行着相当多的数据行(〜200 Mill)。但是,我想知道是否有任何可能的方法来改进此查询?我相信我尝试在进行下一跳之前通过编织必要的过滤器来优化查询。

使用查询

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())

任何建议或技巧都将不胜感激。

0 个答案:

没有答案