上下文:14M 三元组,Blazegraph 工作台。我目前正在尝试设计结合了 SELECT 和 ASK 的查询。更准确地说,我想在我的图表中选择假设正确的结果。
对于我的例子,假设我有很多书,其中有一位作者和一位编辑。我想从作者那里选择他的书通过随机路径长度属性链接到client#1
.
就我而言,使用我的数据,像这样直接实现查询需要花费大量时间:
SELECT ?id_book
WHERE {?id_book prefix:hasAuthor :author#1.
?id_book prefix:linkedToEditor*/prefix:hasClient :client#1}
ORDER by ?id_book
为了减少微积分的时间(x 1:1000),我正在使用脚本来依次实现这些查询。该脚本选择以作者 n°1 作为作者的书籍:
SELECT ?id_book
WHERE {?id_book prefix:hasAuthor :author#1}
ORDER by ?id_book
如果它链接到客户端 n°1 ,我会询问 1 到 n ( id_book#1
, id_book#2
, ..., ) 的每个结果:id_book#n
ASK {id_book#i prefix:linkedToEditor*/prefix:hasClient :client#1}
对于相同的结果,后跟 ASK 查询的 SELECT 查询比第一个 SELECT 查询快得多。我不想探索所有的可能性?id_book prefix:linkedToEditor*/prefix:hasClient :client#1
;我只想将结果保存在链接存在的地方。我尝试使用 FILTER EXISTS 或两个 SELECT 查询,但查询时间同样长:
SELECT ?id_book
WHERE {?id_book prefix:hasAuthor :author#1.}
FILTER EXIST {?id_book prefix:linkedToEditor*/prefix:hasClient :client#1}
ORDER by ?id_book
或者
SELECT ?id_book
WHERE {?id_book prefix:linkedToEditor*/prefix:hasClient :client#1.
{SELECT ?id_book
WHERE {?id_book prefix:hasAuthor :author#1.}
}
}
如何将我的查询优化为一个查询?