我有在电影中找到类似品味的查询。这样用户在同一类型的平均排名之差的绝对值小于1:优化SPARQL查询
SELECT ?p ?p1 ?genre
WHERE{
?p movies:hasRated ?rate.
?p1 foaf:knows ?p.
?rate movies:ratedMovie ?mov.
?rate movies:hasRating ?rating.
?mov movies:hasGenre ?genre.
?p1 movies:hasRated ?ratep1.
?ratep1 movies:ratedMovie ?movp1.
?ratep1 movies:hasRating ?ratingp1.
?movp1 movies:hasGenre ?genre.
FILTER (?p=movies:user1)
}
GROUP BY ?p ?p1 ?genre
HAVING (abs (AVG(?rating)-AVG(?ratingp1))<1.0)
我想问一下,是否可以优化呢?因为它看起来那么糟糕(
这里是数据集,它将被使用的部分:
movies:Man_of_steel movies:hasGenre "action", "thriller" .
movies:Elysium movies:hasGenre "drama", "sci-fi" .
movies:Gravity movies:hasGenre "sci-fi", "drama" .
movies:Django_Unchained movies:hasGenre "thriller", "action" .
movies:user1 movies:hasGender "male" ;
movies:hasAge "30"^^xsd:float ;
movies:hasRated movies:Rating1, movies:Rating2 .
movies:Rating1 movies:ratedMovie movies:Gravity ;
movies:hasRating "4.0"^^xsd:float .
movies:Rating2 movies:ratedMovie movies:Django_Unchained ;
movies:hasRating "9.0"^^xsd:float .
movies:user2 movies:hasGender "female" ;
movies:hasAge "27"^^xsd:float ;
movies:hasRated movies:Rating3, movies:Rating4 ;
foaf:knows movies:user1 .
movies:Rating3 movies:ratedMovie movies:Elysium ;
movies:hasRating "3.0"^^xsd:float .
movies:Rating4 movies:ratedMovie movies:Gravity ;
movies:hasRating "5.0"^^xsd:float .
你是指“优化”它是什么意思?它运行速度是否太慢?还是你想更好地格式化它? –
“看起来很糟糕”是优化查询的一个奇怪原因,你担心它看起来像什么吗?通常,优化查询是为了获得最佳执行性能,但有时您可以重写查询以提高可读性。那么你在这之后会有什么结果? –
我真的很担心它是怎么样的。也许有更好的解决方案,而不是我的查询。 – nlimits