Python SPARQL数据库查询超时

Python SPARQL数据库查询超时,python,sparql,dbpedia,Python,Sparql,Dbpedia,我试图从Python中对DBPedia执行一个相当简单的SPARQL查询,如下所示: from SPARQLWrapper import SPARQLWrapper, JSON city_name = 'Manhattan' query = """select * where { ?URI rdfs:label ?name. filter(regex(str(?name), "^%s"))

我试图从Python中对DBPedia执行一个相当简单的SPARQL查询,如下所示:

from SPARQLWrapper import SPARQLWrapper, JSON
city_name = 'Manhattan'
query = """select * 
               where {
               ?URI rdfs:label ?name.
               filter(regex(str(?name), "^%s"))
           }"""%(city_name)
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setReturnFormat(JSON)
sparql.setQuery(query)
result = sparql.query().convert()
我想检索名称第一部分中与给定城市匹配的所有实体。我知道有很多实体,但它在DBPedia测试浏览器中执行得很好

每当我尝试在Python中运行上述查询时,都会出现超时错误:

EndPointInternalError: EndPointInternalError: endpoint returned code 500 and response. 

Response:
Virtuoso S1T00 Error SR171: Transaction timed out

关于避免这个超时错误有什么建议吗?我意识到,我可能必须使我的查询更加具体,以收紧搜索范围。

首先使用进行全文搜索,然后过滤:

SELECT * {
  ?uri rdfs:label ?name .
  ?name bif:contains "Manhattan" . # Or "'Manhattan*'"
  FILTER(STRSTARTS(?name, "Manhattan"))
}

在Web界面中,查询不会超时,因为通常会设置
30000ms
的提前终止值,因此它会返回给定时间内找到的所有结果。如果从远程应用程序运行查询,则不会设置此值。(但是可以通过在HTTP请求中添加
timeout=30000
来设置)实际上,这样的“随时”功能可能会导致不完整的结果!谢谢你的解释。什么是“bif”字段?它用于访问Virtuoso的全文索引;看见