gpt4 book ai didi

sparql - 有没有办法优化 SPARQL 查询?

转载 作者:行者123 更新时间:2023-12-04 18:32:45 26 4
gpt4 key购买 nike

我将非托管三元组作为单个文档的一部分存储在我的内容数据库中。基本上每个文档都代表一个人,并且定义的三元组指定了该人的经理的文档 URI。我正在尝试使用 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 查询,它可用于返回管理器、层次结构中位于它们下方的人员以及它们相距较远的节点数。
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

这有效,但非常慢,即使在我正在查看的层次结构树深一两层(大约 15 秒)的情况下也是如此。我在数据库中有 63,139 个这种类型的经理三元组。

最佳答案

我认为最大的问题将是 BIND() - MarkLogic 8 根本没有优化您正在使用的模式。您可以尝试将常量替换为您使用 ?manager 的地方吗?变量,看看这是否有很大的不同? IE。:

select  ?leaf (count(?mid) as ?distance) { 
?leaf <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>* ?mid .
?mid <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>+
<http://rdf.abbvienet.com/infrastructure/person/10025613> .
}
group by ?leaf
order by ?leaf

StackOverflow 不是回答此类性能问题的好地方,因为它确实需要我们共同努力来帮助您进行对话。也许你可以尝试联系 supportMarkLogic developer mailing list对于这种问题?

关于sparql - 有没有办法优化 SPARQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37921766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com