2016-10-02 125 views
0

我有結構化的這樣一些RDF數據:SPARQL搜索查詢

[ pref:ip_address "127.0.0.1" ; 
    pref:time  "1459630844.482" ; 
    pref:url   "https://google.com" ; 
    pref:user  "johndoe" 
] . 

我需要查詢將返回所有結果匹配給定的IP,(從時間和結束時間之間)的時間框架,URL(甚至部分匹配)和用戶(甚至部分匹配)。
我現在擁有的是簡單的查詢來獲取成果的單個值,像這樣:

PREFIX pref: <http://something> SELECT DISTINCT * WHERE { ?u pref:user USER_VALUE . ?u ?p ?o . } 

此方法返回給用戶的所有結果,但只有指定的用戶名是完全匹配。這意味着如果USER_VALUE是johndoe,則它將返回johndoe的所有結果,但如果它是john,則返回所有結果。
我對SPARQL的知識非常有限,我很感激任何幫助。謝謝。

回答

1

要做出超過精確匹配的任何內容,您需要使用FILTER並使用諸如CONTAINSREGEX之類的操作。

實施例:

{ ?u pref:user ?user . 
    ?u ?p ?o . 
    FILTER(CONTAINS(?user, "john")) 
} 

有許多的濾波函數,其可以是包括正則表達式是有用的。詳情請參閱規格。

+0

如果他在使用Jena,你也可以建議使用基於Lucene的內置文本搜索來提高性能:https://jena.apache.org/documentation/query/text-query.html – AKSW

+0

好建議if數據足夠大。 – AndyS