我可以在neo4j的同一密码查询中使用“ USING SCAN ...”和“ USING INDEX ...”吗?

时间:2019-01-29 06:12:34

标签: neo4j cypher

我正在阅读有关优化查询的信息,并且遇到了一篇帖子,其中说到,密码执行者有时可能会错过使用索引,或者可能不会扫描所有标签而不是提供的标签,因此最好明确说明要使用的索引以及哪个索引标签进行扫描。 (这是我的理解)

所以当我尝试这样做时,它给了我这个错误

Neo.DatabaseError.Statement.ExecutionFailed: Failed to fulfil the hints of the query.
Could not solve these hints: 'USING SCAN (some node)' 

我有这样的查询:

MATCH (n:Label1)-[r:SOME_REL]->(n2:LABEL3)

n2可以有:Label2:Label3的地方。

我无法运行以下查询:

MATCH (n:Label1{property:val})-[r:SOME_REL]->(n2:LABEL3)
  USING INDEX n:Label1(property)
  USING SCAN n2:Label3
RETURN n

MATCH (n:Label1{property:val})-[r:SOME_REL]->(n2:LABEL3)
  USING SCAN n2:Label3
  USING INDEX n:Label1(property)
RETURN n

1 个答案:

答案 0 :(得分:2)

如果MATCH模式同时指定标签和属性值,则只能使用索引(例如:Label1(property))。因此,例如,这将起作用:

MATCH (n:Label1 {property: 123})-[r:SOME_REL]->(n2:Label3)
USING INDEX n:Label1(property)
USING SCAN n2:Label3
RETURN n;

注意:此查询还为Label3使用一致的大小写。