neo4j - Neo4j:匹配具有另外 2 个共同属性的节点
问题描述
我正在处理包含 4 列数据的 csv 文件中的数据:hotelName
, hotelPool
, hotelSpa
, hotelGym
,hotelName
酒店的唯一名称在哪里,hotelPool
列出酒店拥有的游泳池类型,酒店拥有hotelSpa
的水疗中心类型,并hotelGym
列出酒店有那种健身房。
样本数据如下:
第 1 行"California", "Full-size", "Full-size", "Fully-equipped"
第 2 行"Yorba", "Full-size", "None", "Full-equipped"
第 3 行"Heartbreak", "None", "Full-size", "Full-equipped"
第 4 行"Chelsea", "Full-size", "Full-size", "Fully-equipped"
如果这些酒店有 2 个或更多的共同特征,我想匹配它们。
例如,加利福尼亚州与 Yorba 有 2 个共同点——两家酒店都有全尺寸游泳池和设备齐全的健身房。
加州与 Heartbreak 也有 2 个共同点——两家酒店都拥有全尺寸的水疗中心和设备齐全的健身房。
加州也与切尔西有 3 个共同点——两家酒店都设有全尺寸游泳池、全尺寸水疗中心和设备齐全的健身房。
我想要的输出是具有 2 个或更多共同特征的酒店对,如下所示:
第 1California, Yorba, 2
行 第 2California, Heartbreak, 2
行 第 3 行California, Chelsea, 3
如何根据 2 个或更多特征进行匹配?
解决方案
这应该这样做:
// get all hotels
MATCH (h:Hotel)
// create hotel pairs, avoiding duplicates
WITH COLLECT(h) AS hotels
UNWIND hotels AS h1
UNWIND hotels AS h2
WITH h1,h2
WHERE id(h1)>id(h2)
//loop through keys and count same values
WITH h1, h2,
REDUCE(i=0, key in keys(h1) |
i
+ CASE WHEN h1[key] = h2[key] THEN 1 ELSE 0 END
) AS sameCount
// set your limit
WHERE sameCount >=3
RETURN h1.hotelName, h2.hotelName , sameCount
推荐阅读
- c# - 为什么远程桌面登录时无法显示从服务调用的应用程序
- quire-api - 查询 webhook API
- python - 从字典中调用函数
- python-3.x - 是否可以仅从 auth_key 开始创建 Telethon 客户端?
- c# - 带有 React 应用程序的 ASP.NET 身份在 OAuth2 回调中中断
- python - 如何在 for 循环中创建一个列表,以便我的所有三个爱好都在其中?
- vba - 是否可以在 excel vba 中使用 for next 循环遍历 sapgui 数组?
- php - Symfony4 控制器路由注释中的动态前缀
- postgresql - “不存在”和“不存在”有什么区别
- python - Python RegEx 在分隔符之前和之后将文本与整个文本分组?