Neo4j 有没有办法优化OR where子句的查询?

Neo4j 有没有办法优化OR where子句的查询?,neo4j,cypher,Neo4j,Cypher,下面的查询需要347毫秒,这对我的应用程序来说太多了。有没有办法优化此查询 profile MATCH (s:product {id:'4554969'})-[r]->(o) WHERE o:ExAttrs OR o:ProdAttrs return s.item_sku_id, TYPE(r), o; 这一次不是查询时间,而是所有数据都可用的时间(即,当驾驶员收到所有数据时) 您可以在表选项卡中看到查询时间 例如: Started streaming 10 records after

下面的查询需要347毫秒,这对我的应用程序来说太多了。有没有办法优化此查询

profile
MATCH (s:product {id:'4554969'})-[r]->(o)
WHERE o:ExAttrs OR o:ProdAttrs
return s.item_sku_id, TYPE(r), o;

这一次不是查询时间,而是所有数据都可用的时间(即,当驾驶员收到所有数据时)

您可以在表选项卡中看到查询时间

例如:

Started streaming 10 records after 1 ms and completed after 2 ms
您的查询没有参数化,因此每次更改查询中的id时,Neo4j都必须计算查询计划,因此您会丢失一些ms

MATCH (s:product {id:$id})-[r]->(o)
WHERE o:ExAttrs OR o:ProdAttrs
return s.item_sku_id, TYPE(r), o
并了解如何对所选驱动程序使用参数

编辑:

我有大约50个这样的Java函数来动态生成cypher查询字符串,然后将查询发送到驱动程序api的“execute”以获得结果。在上面的示例中,我已经在使用“参数”方法生成正确的密码查询。但是,此参数化仅在我的查询生成代码中发生,而在“execute”中没有参数化。我的同事将Neo4j本机驱动程序api包装到一个“Neo4jSearchAPI”中,它有一个“execute”方法,将一个cypher查询字符串作为参数在图形上进行查询。我上面的代码就是生成这样的密码查询字符串


因此,如果我真的想使用参数化,我们包装的Neo4jSearchAPI应该支持这一点。基本上,我的50个查询生成函数应该用Neo4jSearchAPI编码,而不是用我自己的代码编码,因为我自己的代码只生成cypher字符串。是这样吗

如何参数化上面的查询,例如,它是否可以加快速度?请参阅我的补充和问题。另外,如何更快地使用查询参数化?
public String query_partial_match(String skuid, String attrKey) {

        return "MATCH (s:product {id:'" + skuid + "'})-[r]->(o) " +
                "WHERE " +
                "(o:ExAttrs OR o:ProdAttrs) AND " +
                "any(key in keys(o) WHERE key =~'(?i).*(" + attrKey + ").*') " +
                "return s.item_sku_id, s.item_name, r, o";
    }