Sam*_*uel 3 regex performance sparql dbpedia
我已经为dbpedia构建了一个带有正则表达式的sparql查询,这个查询非常慢:
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbpedia-owl:<http://dbpedia.org/ontology/>
select ?label where {
?s rdfs:label ?label.
?s dbpedia-owl:thumbnail ?photo.
?s dbpedia-owl:abstract ?abstract.
FILTER langMatches( lang(?label), "FR" ).
FILTER langMatches( lang(?abstract), "FR" ).
FILTER regex(?label, "^Jules V", "i").
}
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
您可以使用公共端点http://fr.dbpedia.org/sparql尝试它,看看您必须等待几秒钟.
有没有办法让我在这方面取得更好的表现,即使最终质量不是那么好?
谢谢,塞缪尔
REGEX除非您的查询限制到数据集的足够小部分,否则使用任何查询几乎肯定会很慢.处理a REGEX基本上要求商店对潜在结果进行线性扫描,检查每个结果是否与正则表达式匹配.
如果你有一个足够简单的正则表达式,你应该尝试两件事之一:
在您的情况下,您正在寻找以某个子字符串开头的字符串,因此使用该STRSTARTS函数几乎肯定会更有效,因为这不需要完整的正则表达式.当然,这假设您的SPARQL引擎符合最新的SPARQL 1.1草案规范.
许多商店都包含全文搜索扩展,可用于代替REGEX并通常产生明显更好的性能,因为您访问的是全文索引,而不是对潜在结果进行线性扫描.
在DBPedia的情况下,它背后的Virtuoso商店支持以下语法:
?label bif:contains "Jules"
Run Code Online (Sandbox Code Playgroud)
请注意,Virtuoso全文语法有些限制,因此您不能Jules V按原样使用,因为每个术语必须至少包含4个字符(可能为3个字符).但是你可以将它与进一步的结合起来FILTER缩小到你想要的结果:
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbpedia-owl:<http://dbpedia.org/ontology/>
select ?label where {
?s rdfs:label ?label.
?s dbpedia-owl:thumbnail ?photo.
?s dbpedia-owl:abstract ?abstract.
FILTER langMatches( lang(?label), "FR" ).
FILTER langMatches( lang(?abstract), "FR" ).
?label bif:contains "Jules" .
FILTER (CONTAINS(?label, "V"))
}
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
此查询几乎是即时运行的
| 归档时间: |
|
| 查看次数: |
2490 次 |
| 最近记录: |