sparql - GraphDB - 具有两个连接的非常慢的 sparql 查询

标签 sparql rdf graphdb

我的数据库有关于文档的信息,其中每个文档都有一个类别,例如

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX: <http://example.com>

:doc1 :hasCategory :category1 .
:category1 rdfs:label "Law" .

大约有 10 万条这样的语句。

运行一个简单的查询来获取每个类别的文档数:

SELECT ?category (count(distinct ?doc) as ?count) WHERE {
    ?doc :hasCategory ?category .
} GROUP BY ?category

运行大约需要 0.1 秒。

但要同时返回类别标签:

SELECT ?category ?label (count(distinct ?doc) as ?count) WHERE {
            ?doc :hasCategory ?category .
            ?category rdfs:label ?label .
} GROUP BY ?category ?label

此查询运行时间超过 7 秒。

为什么差异会这么大,是否有更优化的查询可以用来获取标签?

最佳答案

我发现我可以通过以下查询在 0.2 秒内获得所需的结果:

SELECT ?category (sample(?lbl) as ?label) ?count WHERE {
    ?category rdfs:label ?lbl .
    {
        SELECT ?category (count(distinct ?doc) as ?count) WHERE {
            ?doc :hasCategory ?category .
        } GROUP BY ?category 
    }
} GROUP BY ?category ?count

但我真的不明白为什么它更有效率。

关于sparql - GraphDB - 具有两个连接的非常慢的 sparql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856301/

相关文章:

sparql - GraphDB Free 8.8 Sparql INSERT 返回 400。不支持 INSERT?

sparql - 将任何 URI 类型的 CURI 字符串表示形式转换为真正的 CURI 或 IRI

SPARQL 结果集限制为 10000

java - 正则表达式 SPARQL 查询

rdf - rdf :resource and rdfs:Resource? 有什么区别

java - 如何使用 Jena API 在 vi​​rtuoso 中加载 n-triple 文件

elasticsearch - 询问有关本体和graphdb的问题

sparql - SPARQL 中井号 (#) 的含义是什么?

sparql - 将数据从一个端点迁移到另一个端点的纯 SPARQL?

hadoop - 分布式系统中语义网的推理