Sparql Jena似乎在缓存绑定(RAND())查询
我在使用ApacheJena的Java程序中连续数千次运行以下查询(以生成随机游动) 然而,我总是得到相同的属性和对象集(尽管这似乎极不可能)。我假设Jena正在将结果缓存到查询中(尽管有Sparql Jena似乎在缓存绑定(RAND())查询,sparql,jena,Sparql,Jena,我在使用ApacheJena的Java程序中连续数千次运行以下查询(以生成随机游动) 然而,我总是得到相同的属性和对象集(尽管这似乎极不可能)。我假设Jena正在将结果缓存到查询中(尽管有RAND()组件) 解决这个问题的最佳和最有效的方法是什么 您是将Jena用作RDF存储还是SPARQL远程端点的包装器?如果是后者,您可能会从Virtuoso SPARQL端点获得这种行为。不,我有一个本地OntModel,我正在查询它。您使用的Jena版本是什么?当我使用3.11版运行您的查询时,每次运行查
RAND()
组件)
解决这个问题的最佳和最有效的方法是什么 您是将Jena用作RDF存储还是SPARQL远程端点的包装器?如果是后者,您可能会从Virtuoso SPARQL端点获得这种行为。不,我有一个本地
OntModel
,我正在查询它。您使用的Jena版本是什么?当我使用3.11版运行您的查询时,每次运行查询时都会生成不同的结果。也无法复制它。根据代码,随机生成是基于一个没有种子的静态变量,因此不可能进行响应。不太可能每次都生成相同的随机数。剩下的代码呢?数据呢?我想我找到了最可能的原因:我正在多线程环境中运行查询。我可以想象,rand
函数不适用于这种设置。(至少在Java中类似:您不能使用rand.nextInt()
,而必须在多线程设置中使用ThreadLocalRandom.current().nextInt()
)。
SELECT ?p ?o
WHERE {
$ENTITY$ ?p ?o .
FILTER(!isLiteral(?o)).
BIND(RAND() AS ?sortKey)
} ORDER BY ?sortKey LIMIT 1