我想要獲得使用餘弦相似性的電影建議。將屬性類型從字符串更改爲neo4j中的整數
Cypher支架查詢:
MATCH (p1:User)-[x:HAS_RATED]->(m:Movie)<-[y:HAS_RATED]-(p2:User)
WITH SUM(x.rating * y.rating) AS xyDotProduct,
SQRT(REDUCE(xDot = 0.0, a IN COLLECT(x.rating) | xDot + a^2)) AS xLength,
SQRT(REDUCE(yDot = 0.0, b IN COLLECT(y.rating) | yDot + b^2)) AS yLength,
p1, p2
MERGE (p1)-[s:SIMILARITY]-(p2)
SET s.similarity = xyDotProduct/(xLength * yLength)
它引發錯誤:
Don't know how to Multiply(x.rating,y.rating) `4` with `4`
我認爲的Neo4j集收視率字符串而不是整型,所以我跑這個查詢 -
match (:User)-[r:HAS_RATED]->(:Movie)
with r limit 100000
set r.rating = toInt(r.rating) return r
但即使在此更新之後,我也遇到了與以前相同的錯誤。
我知道,我可以添加toInt修改爲每個變量,但我怎麼繁衍在我的關係評級領域不這樣做,或者換句話說,我該如何設置等級爲整型?
我認爲你的策略是正確的。減少查詢的複雜性我已經能夠複製這個問題,並通過'SET r.rating = toInt(r.rating)'來修復它。你確定你所有的評級屬性已被重置爲整數?你有多少關係在你的數據庫中?你的密碼使用「LIMIT 100000」 - 你有可能沒有捕捉到一些關係,所以仍然有字符串? – ceej
我有100萬的關係。我認爲限制在單個請求上執行,所以數據庫不會用完堆內存,但最終會在整個圖上運行? – goelakash
不會。它會限制結果,因此只能在匹配的100000上運行。您需要使用「SKIP 100000 LIMIT 100000」重新執行查詢,直到您匹配並因此重置所有評級屬性。 – ceej