我正在测试RDF4J的空间查询。我已经在Appache Tomcat 9.0.12上部署了RDF4J Server和Workbench应用程序。我当前的数据集有853个LineString和88个多边形表示为WKT字段。但是查询的性能因我正在使用的存储库类型而异。以下是SPARQL查询。
PREFIX cpmeta1: <http://meta.icos-cp.eu/ontologies/cpmeta/>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX sf: <http://www.opengis.net/ont/sf#>
PREFIX uom: <http://www.opengis.net/def/uom/OGC/1.0/>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
SELECT (count(distinct ?obj1) as ?C)
WHERE {
?obj1 a geo:Feature;
geo:hasGeometry ?geom1.
?geom1 a sf:LineString;
geo:asWKT ?coord1.
?obj2 a geo:Feature;
geo:hasGeometry ?geom2.
?geom2 a sf:Polygon;
geo:asWKT ?coord2.
FILTER(geof:sfWithin(?coord1,?coord2))
}
查询运行正常,结果返回567作为任何多边形内的线串对象的计数。
问题在于返回结果所花费的时间。如果存储库的类型为“简单内存”或“本机”,则此查询的执行时间在10到40秒之间(不同的迭代)。但是,如果存储库是使用Lucene创建的,则此查询的执行时间将超过30分钟。
从RD4J的文档中,我认为使用Lucene可以为asWKT字段提供空间索引,因此我期望使用Lucene进行空间连接的时间更少。但是相反,对于lucene,相同的查询性能似乎呈指数级下降。
我在两种情况下都测试了相同的场景:工作台aap和eclipse项目中的API。在这两种情况下,当涉及Lucene时,查询性能都会降低太多。
谁能告诉我我在这里想念的东西吗?
最好的问候