在 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的三重索引可以直接进行范围查询,不需要单独的范围索引。优化器应识别并优化此查询模式。