2017-02-24 1 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:検索式が常に妥当で返し

    の式はで返す順序を理解する場合、考慮すべき2つの 主なルールがあります注文(関連性が最も低いものと最も関連性が高いもの)。

  • XPath式は常にドキュメントの順序で返されます。常にドキュメント順に返すXPath式をされて含まれています

が、これはそれがCTSを意味していますか?その場合、関連性の高い順序で返されるSPARQLクエリをどのように構築できますか?

おかげで、 ケビン

+0

'のCTS:search'は、XQueryのためではなくSPARQL – AKSW

+0

@AKSWため、私は参照してください。 MarkLogicが純粋なSPARQLでクエリ結果をランク付けする方法を持っていれば非常にいいですね。 –

答えて

3

あなたが持っている例では、使用している言語は、SPARQLである - CTSのフラグメントフィルタと:含まれています。

この場合、cts:containsは、一致するフラグメントIDを分離する場合にのみ有効です。これにより、SPARQLクエリで使用される候補ドキュメントがフィルタリングされます。したがって、私はctsの関連性が考慮されているとは思わない。

しかし、あなたは探している結果を別のやり方で得ることができます:問題のドキュメントに対して実際のcts:検索を行い、次にcts:triple-range-queryを使用してそれらをフィルタリングします。

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

+0

ありがとう、David。 cts:searchをSPARQLクエリで使用できるかどうか知っていますか?再利用できるコードがあるので、純粋なSPARQLにしようとしています。 –

+0

hi。完全なCTS検索ではありません。基本的にはトリプルを含むフラグメントのフィルタであるcts-queryを返すものです –

関連する問題