优化SPARQL查询以加载样本标签

优化SPARQL查询以加载样本标签,sparql,rdf,virtuoso,Sparql,Rdf,Virtuoso,以下查询从我的数据集中加载合同(合同在组织和合作伙伴之间) 此查询返回大约8000份合同,并立即返回(只需几秒钟)。现在,我需要加载组织和合作伙伴的标签/名称。可能有多个名字,我只需要一个。这是我的疑问: SELECT ?contract ?organisation ?partner (SAMPLE(?organisationNames) AS ?organisationName) (SAMPLE(?partnerNames) AS ?partnerName) WHERE {

以下查询从我的数据集中加载合同(合同在组织和合作伙伴之间)

此查询返回大约8000份合同,并立即返回(只需几秒钟)。现在,我需要加载组织和合作伙伴的标签/名称。可能有多个名字,我只需要一个。这是我的疑问:

SELECT ?contract ?organisation ?partner
    (SAMPLE(?organisationNames) AS ?organisationName)
    (SAMPLE(?partnerNames) AS ?partnerName)
WHERE {
    ?organisation
        a gr:BusinessEntity ;
        rejstriky:contract ?contract .

    ?contract a rejstriky:Contract ;
        rejstriky:partner ?partner .

    ?organisation gr:legalName ?organisationNames .
    ?partner gr:legalName ?partnerNames .
}
GROUP BY ?contract ?organisation ?partner
此查询突然需要几分钟才能完成

我做了一些实验,发现如果我决定使用单独的SPARQL调用(在一个批处理中使用40个名称)获取所有名称,只需不到2分钟(速度会明显加快)。不管怎样,如果我能够在几分之一秒内生成8000个项目,为每个项目加载两个标签应该不会花那么长时间


你对如何优化我的查询有什么想法吗?请注意,我使用的是Virtuoso。

无法访问样本数据或Virtuoso,因此很难确定这是否有帮助,但您可以尝试避免使用样本

 SELECT ?contract ?organisation ?organisationName ?partner ?partnerName

WHERE {
    ?organisation
        a gr:BusinessEntity ;
        rejstriky:contract ?contract .

    ?contract a rejstriky:Contract ;
        rejstriky:partner ?partner .

   { SELECT ?organisationName WHERE { ?organisation gr:legalName ?organisationName . } LIMIT 1}
   { SELECT ?partnerName WEHRE {?partner gr:legalName ?partnerName . } LIMIT 1}
}
GROUP BY ?contract ?organisation ?organisationName ?partner ?partnerName

无法访问样本数据或专家,因此很难确定这是否有帮助,但您可以尝试避免使用样本

 SELECT ?contract ?organisation ?organisationName ?partner ?partnerName

WHERE {
    ?organisation
        a gr:BusinessEntity ;
        rejstriky:contract ?contract .

    ?contract a rejstriky:Contract ;
        rejstriky:partner ?partner .

   { SELECT ?organisationName WHERE { ?organisation gr:legalName ?organisationName . } LIMIT 1}
   { SELECT ?partnerName WEHRE {?partner gr:legalName ?partnerName . } LIMIT 1}
}
GROUP BY ?contract ?organisation ?organisationName ?partner ?partnerName

谢谢你,好主意。但是查询花了将近一个小时才完成,然后返回了一个空名称的结果。谢谢,好主意。但是查询花了将近一个小时才完成,然后返回了一个空名称的结果。这看起来像是Virtuoso的查询计划器中的一个小问题——没有明显的理由需要这么长时间。您是否尝试过直接报告问题并查看他们是否有解决方案?第一个猜测是Virtuoso中的查询优化错误。您是否在没有
样本的情况下测试了速度?也就是说,将
选择
列表更改为
?合同?组织?合作伙伴?组织名称?合作伙伴名称
?您还可以将此问题提交给包括Virtuoso开发团队几名成员的用户……我发现数据集有点损坏。大约1000个合作伙伴由一个URI表示,但该URI附带了1000个不同的法定名称。如果我删除聚合,它的运行速度实际上要快3倍,但它会生成4100万个条目。也许这就是造成样本聚合混乱和查询速度减慢的原因。然而,我仍然认为,无论我选择的集合大小如何,为8000个项目选择一个样本值应该是相当快的。你认为呢?好的,显式过滤掉代表1000个不同合作伙伴的单一URI将查询持续时间缩短到几秒钟左右。我来看看能否修复数据集。谢谢你的帮助!这看起来像是Virtuoso的查询计划器中的一个小问题——没有明显的理由需要这么长时间。您是否尝试过直接报告问题并查看他们是否有解决方案?第一个猜测是Virtuoso中的查询优化错误。您是否在没有
样本的情况下测试了速度?也就是说,将
选择
列表更改为
?合同?组织?合作伙伴?组织名称?合作伙伴名称
?您还可以将此问题提交给包括Virtuoso开发团队几名成员的用户……我发现数据集有点损坏。大约1000个合作伙伴由一个URI表示,但该URI附带了1000个不同的法定名称。如果我删除聚合,它的运行速度实际上要快3倍,但它会生成4100万个条目。也许这就是造成样本聚合混乱和查询速度减慢的原因。然而,我仍然认为,无论我选择的集合大小如何,为8000个项目选择一个样本值应该是相当快的。你认为呢?好的,显式过滤掉代表1000个不同合作伙伴的单一URI将查询持续时间缩短到几秒钟左右。我来看看能否修复数据集。谢谢你的帮助!