在 MarkLogic 中优化 SPARQL 中的范围查询
Optimizing range queries in SPARQL in MarkLogic
我想编写一个 SPARQL 查询来交叉引用具有单个时间点的实体和一组具有时间范围的实体。这是图形模式:
{
?entity :atTime ?probe.
?interval :startTime ?start ;
:endTime ?end .
FILTER (?start < ?probe)
FILTER (?probe < ?end)
}
查询引擎 运行 的一种方法是找到所有定义了 :atTime
的实体,找到所有间隔,并执行所有这些检查。但是 MarkLogic(和大多数数据库)具有范围索引的功能,因此可以更有效地完成此操作。
我在 ML 文档中看到您可以在 SPARQL 中使用 cts:contains
来获取其字符串索引。有没有办法对范围查询做类似的事情?
一些数据库识别代码中的设计模式,就像我在此处引用的那样,并且他们自己进行优化(保持代码标准!)。也许 MarkLogic 会这样做?我找不到任何文件告诉我这件事。
MarkLogic的三重索引可以直接进行范围查询,不需要单独的范围索引。优化器应识别并优化此查询模式。
我想编写一个 SPARQL 查询来交叉引用具有单个时间点的实体和一组具有时间范围的实体。这是图形模式:
{
?entity :atTime ?probe.
?interval :startTime ?start ;
:endTime ?end .
FILTER (?start < ?probe)
FILTER (?probe < ?end)
}
查询引擎 运行 的一种方法是找到所有定义了 :atTime
的实体,找到所有间隔,并执行所有这些检查。但是 MarkLogic(和大多数数据库)具有范围索引的功能,因此可以更有效地完成此操作。
我在 ML 文档中看到您可以在 SPARQL 中使用 cts:contains
来获取其字符串索引。有没有办法对范围查询做类似的事情?
一些数据库识别代码中的设计模式,就像我在此处引用的那样,并且他们自己进行优化(保持代码标准!)。也许 MarkLogic 会这样做?我找不到任何文件告诉我这件事。
MarkLogic的三重索引可以直接进行范围查询,不需要单独的范围索引。优化器应识别并优化此查询模式。