首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4j多维搜索

Neo4j多维搜索
EN

Stack Overflow用户
提问于 2020-03-24 17:31:41
回答 2查看 33关注 0票数 0

我正在尝试开发一个Neo4j搜索查询来查找相似的照片。

我有62个标记为“have”的节点,它们表示所有其他标记为"Photo“的节点将与之进行比较的照片。我的数据如下所示:

代码语言:javascript
运行
复制
(p:Photo {name: 'treehouse'})-[r:LOOKS_LIKE {weight: 0.874655}]->(l:Likeness {name: 'lighthouse'})
(p:Photo {name: 'cat'})-[r:LOOKS_LIKE {weight: 0.00454}]->(l:Likeness {name: 'lighthouse'})
(p:Photo {name: 'house'})-[r:LOOKS_LIKE {weight: 0.4768}]->(l:Likeness {name: 'lighthouse'})
etc...

所有关系权重都在0到1之间。

因此,示例搜索可能是:

代码语言:javascript
运行
复制
[
{name: 'lighthouse', value: 0.856378},
{name: 'car', value: 0.17854},
{name: 'tank', value: 0.034523},
{name: 'pencil', value: 0.078902}
]

如何按节点和权重的相似度(距离)顺序返回节点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-26 20:26:40

尝试此查询。它查找搜索的所有匹配项,然后计算相似度为1减去搜索和关系权重之间的差值。它还将匹配每张照片的各个肖像作为地图返回。

代码语言:javascript
运行
复制
UNWIND [
{name: 'lighthouse', value: 0.856378},
{name: 'car', value: 0.17854},
{name: 'tank', value: 0.034523},
{name: 'pencil', value: 0.078902}
] AS s
MATCH (p:Photo)-[r:LOOKS_LIKE]->(l:Likeness)
WHERE l.name = s.name
RETURN p.name, SUM(1 - abs(r.weight - s.value)) AS similarity,
COLLECT({likeness:l.name, weight:r.weight, similarity: 1 - abs(r.weight - s.value)}) AS matches 
ORDER BY similarity desc
票数 1
EN

Stack Overflow用户

发布于 2020-03-24 23:11:51

可以使用order by和limit子句返回指定数量的排序结果。

尝试这样做,看看哪五个肖像最接近树屋照片。

代码语言:javascript
运行
复制
MATCH (p:Photo {name:'treehouse'})-[r:LOOKS_LIKE]->(l:Likeness)
RETURN l.name, r.weight
ORDER BY r.weight DESC
LIMIT 5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60828240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档