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