[英]How can I list the users with the most similar entries with ArangoDB
我今天開始新項目。 我有用戶表,標簽表和user_tags邊緣的圖形結果。
我在圖形上附加了一些標簽給用戶。 如何列出與ArangoDB條目最相似的用戶。
例如:
當我搜索用戶ID 112用戶。 結果應與此類似:
非常見數據不應包含在結果用戶ID中:115
如果沒有人知道arangodb解決方案,如果有neo4j解決方案,我可以使用neo4j。
謝謝。
在cypher中,這是查詢:
MATCH (u1:User {id:114})-[:HAS_TAG]->(tag:Tag),
(u:User)-[:HAS_TAG]->(tag:Tag)
WITH u, collect(id(tag)) AS tags
RETURN u, tags, size(tags) AS score
ORDER BY score DESC
干杯
在ArangoDB中,只要您創建一個以users
和tags
為頂點集合,以user_tags
作為邊集合的圖形,此查詢就可以使用:
LET active_user = FIRST(
FOR u IN users
FILTER u.id == @user_id
RETURN u._id
)
LET active_tags = (
FOR v IN 1..10 OUTBOUND active_user GRAPH 'user_tags_graph'
RETURN (v.id)
)
FOR u IN users
FILTER u._id != active_user
LET tags_in_use = FLATTEN(
FOR v IN 1..10 OUTBOUND u._id GRAPH 'user_tags_graph'
RETURN [v.id]
)
LET tag_matches = (
RETURN LENGTH(INTERSECTION(active_tags, tags_in_use))
)
FILTER FIRST(tag_matches) > 0
SORT tag_matches DESC
RETURN {
[u.id]: INTERSECTION(active_tags, tags_in_use)
}
可能可以對其進行大量優化,但是像這樣將其分解會使它更易於理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.