有没有办法按MarkLogic 8中的相关性分数对SPARQL查询结果进行排序?

时间:2017-02-24 20:42:22

标签: sparql marklogic

我们在MarkLogic服务器上对某些临床本体数据运行SPARQL查询。我们的查询如下所示:

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

SELECT *
FROM <http://example/ontologies/snomedct>
WHERE {
  ?s rdfs:label ?o .
  FILTER cts:contains(?o, cts:word-query("Smoke*", "wildcarded"))
}
LIMIT 10

我们希望根据相关性得分得到排序结果,但相反它们似乎是以某种随机顺序排列的。用查询尝试了很多方法,但没有任何效果。经过一些研究,我们在MarkLogic文档中找到了这个声明:

  

当理解表达式返回的顺序时,有两个   要考虑的主要规则:

     
      
  • cts:搜索表达式始终按相关性顺序返回(与最不相关的顺序最相关)。
  •   
  • XPath表达式始终按文档顺序返回。
  •   

这是否意味着cts:contains是一个始终按文档顺序返回的XPath表达式?如果是这样的话,我们如何构建一个以相关顺序返回的SPARQL查询?

谢谢, 凯文

1 个答案:

答案 0 :(得分:3)

在您的示例中,您使用的语言是SPARQL - 使用cts:contains的片段过滤器。

在这种情况下,cts:contains仅用于隔离匹配的片段ID - 从而过滤SPARQL查询中使用的候选文档。因此,我不认为考虑了cts的相关性。

但是,您可能会以不同的方式获得您正在寻找的结果:执行实际的cts:搜索有问题的文档 - 然后使用cts:triple-range-query过滤它们。

https://docs.marklogic.com/cts:triple-range-query