neo4j提高了cypher查询性能

时间:2014-01-05 15:32:31

标签: neo4j cypher

我有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)

1 个答案:

答案 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