You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Neo4j实现类Tinder推荐逻辑的Cypher查询与触发器方案

满足需求的Cypher方案

先搞定评分更新的触发器,毕竟高吸引力用户的指标得实时更新对吧?每次有新的:LIKED关系创建时,自动更新被点赞用户的elo_score(按要求等于被点赞的总次数):

CREATE TRIGGER updateEloScoreOnLike
  WHEN CREATE (:User)-[:LIKED]->(target:User)
  CALL {
    WITH target
    MATCH ()-[:LIKED]->(target)
    SET target.elo_score = count(*)
  }
  AFTER COMMIT;

核心查询语句

下面的查询会返回20条结果,混合三类用户:已向你发起点赞的用户、高吸引力用户、普通未查看用户,且所有结果都是你还没建立:LIKED或:PASSED关系的潜在用户:

// 定义当前用户,替换$currentUserId为实际用户ID
MATCH (current:User {id: $currentUserId})

// 收集三类目标用户
WITH current
CALL {
  WITH current
  // 1. 已向当前用户发起LIKED的用户
  MATCH (suitor:User)-[:LIKED]->(current)
  WHERE NOT (current)-[:LIKED|PASSED]->(suitor)
  RETURN suitor AS potentialUser, 3 AS priority // 优先级最高,优先展示
  UNION ALL
  WITH current
  // 2. 高吸引力用户(取elo_score靠前的候选池)
  MATCH (popular:User)
  WHERE NOT (current)-[:LIKED|PASSED]->(popular) AND popular <> current
  RETURN popular AS potentialUser, 2 AS priority
  ORDER BY popular.elo_score DESC LIMIT 50
  UNION ALL
  WITH current
  // 3. 普通未查看用户
  MATCH (normal:User)
  WHERE NOT (current)-[:LIKED|PASSED]->(normal) AND normal <> current
  RETURN normal AS potentialUser, 1 AS priority
  LIMIT 100
}

// 混合结果并分页
WITH DISTINCT potentialUser
ORDER BY rand() // 随机打乱实现三类用户混合
LIMIT 20

// 返回用户信息,可按需调整字段
RETURN potentialUser.id AS userId, potentialUser.name AS userName, potentialUser.elo_score AS attractivenessScore

逻辑说明

  • 触发器部分:每次新点赞关系创建后,自动统计被点赞用户的总点赞数并更新elo_score,确保高吸引力用户的指标实时准确。
  • 查询部分:
    • 用UNION ALL合并三类用户数据源,给不同类型设置优先级(可根据业务需求调整权重)
    • 通过NOT (current)-[:LIKED|PASSED]->(user)过滤掉当前用户已查看的用户
    • 最后用rand()随机打乱结果,实现三类用户的自然混合,再取20条分页结果
    • 各类用户的候选数量(比如高吸引力取前50、普通用户取前100)可按需调整,保证混合效果符合预期

内容的提问来源于stack exchange,提问作者atkayla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:56:36