我有items
图表数据库。每个item
都与多个properties
相关联,可以由多个items
共享。
我添加了search
节点,该节点由少数properties
定义。
所以我将(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 version 1.9.2)
答案 0 :(得分:3)
恕我直言,只能与&gt;匹配的项目x属性,您仍然需要找到所有与搜索节点具有共同属性的项目。发布,您可以使用&lt;过滤掉匹配项x属性的共同点。你得到了什么样的数字?在最糟糕的情况下,匹配了多少项以及丢弃了多少项?
您可以简化查询(在控制台上匹配的结果,但可能会遗漏一些未在此问题中指定的详细信息)
START se=node(11)
MATCH (se)-[:SEARCH]- >(pr)<-[:HAS]-(item)
WHERE HAS (item.type) AND (item.type = "item")
WITH count(pr) AS matching_properties, item
WHERE matching_properties>1
RETURN item.name AS item_name, matching_properties
ORDER BY matching_properties DESC