【发布时间】:2017-04-18 23:45:58
【问题描述】:
我正在尝试找出拥有所有必要技能以符合职业资格的用户数量。用户可以有很多技能,我想返回每个工作的所有合格用户。
这是我当前的查询:
MATCH (:User)-[:has_skill]->(:Skill)<-[:requires]-(o:Occupation)
WITH DISTINCT o
MATCH (o)
WITH o, SIZE((o)-[:requires]->()) AS occupation_skill_count
MATCH (o)-[:requires]->(:Skill)<-[hs:has_skill]-(u:User)
WITH o, u, occupation_skill_count, count(hs) AS user_skill_count
WHERE occupation_skill_count = user_skill_count
WITH o.title as occupation_title, count(u) as users_count
RETURN occupation_title, users_count
但是,我担心我的查询效率不高,因为它会超时(有超过 60,000 个职业、10,000 个用户和 2,500 个技能)。我想知道是否有更好的方法来编写这个查询。
我编写此查询的方法是,
- 匹配所有通过技能连接到用户的职业。
- 计算所有这些职业所需技能的数量。
- 通过技能匹配所有与该职业相关的用户,其中用户对该职业的技能数量等于该职业所需的所有技能数量。
这似乎在记录少得多的暂存环境中工作。但是,由于数据太多,它只会在 prod 中超时。有没有更好的写法?
【问题讨论】: