我们在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查询?
谢谢, 凯文
答案 0 :(得分:3)
在您的示例中,您使用的语言是SPARQL - 使用cts:contains的片段过滤器。
在这种情况下,cts:contains仅用于隔离匹配的片段ID - 从而过滤SPARQL查询中使用的候选文档。因此,我不认为考虑了cts的相关性。
但是,您可能会以不同的方式获得您正在寻找的结果:执行实际的cts:搜索有问题的文档 - 然后使用cts:triple-range-query过滤它们。