Search 搜索未知路径节点的所有属性,并返回匹配率最高的节点

Search 搜索未知路径节点的所有属性,并返回匹配率最高的节点,search,graph,neo4j,cypher,nodes,Search,Graph,Neo4j,Cypher,Nodes,我正在用Cypher构建一个搜索函数,其中有一个用于图形搜索的输入字段。棘手的是,我不知道标签和属性,搜索查询可能由多个单词组成。搜索应该返回最相关的节点,可以是直接匹配节点,也可以是间接匹配节点,这意味着一个节点连接到一个或多个直接匹配节点。示例搜索查询可以是:iphonejohndoe 我的第一次迭代是匹配所有节点,迭代所有属性,并对属性值与搜索字符串列表aka$querys进行简单的不区分大小写的字符串比较: MATCH (n) WITH n, [k in KEYS(n) WHERE an

我正在用Cypher构建一个搜索函数,其中有一个用于图形搜索的输入字段。棘手的是,我不知道标签和属性,搜索查询可能由多个单词组成。搜索应该返回最相关的节点,可以是直接匹配节点,也可以是间接匹配节点,这意味着一个节点连接到一个或多个直接匹配节点。示例搜索查询可以是:iphonejohndoe

我的第一次迭代是匹配所有节点,迭代所有属性,并对属性值与搜索字符串列表aka
$querys
进行简单的不区分大小写的字符串比较:

MATCH (n)
WITH n, [k in KEYS(n) WHERE any(q IN $queries WHERE toLower(toString(n[k])) CONTAINS q) | k] AS keys
UNWIND keys AS key
RETURN DISTINCT n
这很好,但返回的匹配项太多。对于我的示例查询,它将返回包含单词iPhone的所有
Product
节点和部分包含名称JohnDoe的所有
Customer
节点

我希望得到的结果是匹配最多的节点路径,例如:

(p:Product {name: iPhone 11 64GB})<-[:CONTAINS]-(o:Order)<-[:ORDERED]-(c:Customer {firstName: John, lastName: Doe})
(p:Product{name:iphone1164gb})