Neo4j的CYPHER提高查询性能(neo4j improving cypher query pe

2019-10-19 04:52发布

我有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,这是一个很大的浪费。

我怎样才能“MATCH”只有{X}匹配属性?

创建了一个匹配样本: http://console.neo4j.org/?id=adrgsh

(Neo4j的版本1.9.2)

Answer 1:

恕我直言,以能够与> X属性相匹配的唯一项目,你仍然需要找到所有那些在普通使用的搜索节点属性的项目。 后,您可以过滤掉在共同<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


文章来源: neo4j improving cypher query performance
标签: neo4j cypher