2017-02-24 34 views
1

我們在MarkLogic服務器上對某些臨牀本體數據運行SPARQL查詢。我們的查詢如下所示:有沒有辦法在MarkLogic 8中通過相關性分數對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

'CTS:search'是XQuery和不SPARQL – AKSW

+0

@AKSW,我明白了。如果MarkLogic能夠將查詢結果以純SPARQL進行排名,那將會非常好。 –

回答

3

在你的例子中,你正在使用的語言是SPARQL - 與CTS的片段過濾器:包含的內容。

在這種情況下,cts:contains僅用於隔離匹配的片段ID - 從而過濾SPARQL查詢中使用的候選文檔。因此,我不認爲考慮到了相關性。

但是,您可能會以不同的方式獲得結果:在相關文檔上執行實際的cts:搜索 - 然後使用cts:triple-range-query對其進行過濾。

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

+0

謝謝,大衛。你知道是否可以在SPARQL查詢中使用cts:search?我們試圖使它成爲純粹的SPARQL,因爲我們可以重用代碼。 –

+0

嗨。不是一個完整的cts搜索。只是返回cts-query的任何東西 - 實際上它是包含三元組的片段的過濾器 –

相關問題