【发布时间】:2018-12-05 13:27:09
【问题描述】:
我有items 图形数据库。每个item连接多个properties,可以被多个items共享。
我添加了一个由少数properties 定义的search 节点。
所以我有(search_node)连接到多个(properties_nodes)连接到多个(items_nodes)
现在我想通过 {x} 个属性或更多属性获取回答此搜索的项目列表。按匹配属性的数量排序。
start se=node:node_auto_index(name = {name}), pr = node:node_auto_index(type="item_property")
MATCH p=(se) -[rt:SEARCH]- > (pr)<-[r]-(item)
WHERE Has(item.type) and (item.type = "item")
WITH item, collect(distinct pr.name) as rs
where length(rs) > {x}
RETURN item.name as item_name, length(rs) as matching_properties
ORDER BY matching_properties desc
对我来说,性能问题是它会搜索所有匹配的项目,甚至那些只匹配一个属性的项目,然后删除所有匹配小于 {x} 的项目。 如果 {x} 大于 1,那就太浪费了。
如何仅通过 {x} 个匹配属性来“匹配”?
创建了一个匹配的样本:http://console.neo4j.org/?id=adrgsh
(neo4j 版本 1.9.2)
【问题讨论】: