У меня есть неуправляемые тройки, хранящиеся как часть отдельных документов, которые я храню в своем содержании db. По сути, каждый документ представляет собой человека, а определенная тройка указывает URI документа для менеджера человека. Я пытаюсь использовать SPARQL для определения длины путей между менеджером и всеми людьми под ними в иерархии.Есть ли способ оптимизировать запросы SPARQL?
Тройки в документе выглядит
<sem:triple xmlns:sem="http://marklogic.com/semantics">
<sem:subject>http://rdf.abbvienet.com/infrastructure/person/10740024</sem:subject>
<sem:predicate>http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager</sem:predicate>
<sem:object>http://rdf.abbvienet.com/infrastructure/person/10206242</sem:object>
</sem:triple>
Я нашел следующий SPARQL запрос, который может быть использован для возврата менеджера, aperson под ними в иерархии, а число узлов удаленных они ,
select ?manager ?leaf (count(?mid) as ?distance) {
BIND(<http://rdf.abbvienet.com/infrastructure/person/10025613> as ?manager)
?leaf <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>* ?mid .
?mid <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>+ ?manager .
}
group by ?manager ?leaf
order by ?manager ?leaf
Это работает, но очень медленно, даже в том случае, когда иерархия дерева Я смотрю на это один или два уровня глубины, вокруг 15s. У меня есть 63,139 менеджер тройки этого типа в дБ.
Не должно быть 'ORDER BY? Leaf', поскольку у вас есть только одна привязка для'? Manager'. – scotthenninger