gpt4 book ai didi

强制索引的 Neo4j 问题

转载 作者:行者123 更新时间:2023-12-01 11:22:11 24 4
gpt4 key购买 nike

我遇到了一个问题,我在 Cypher 批量查询中强制使用索引,

UNWIND {rows} AS row
MATCH (s:Entity)
USING INDEX s:Entity(uuid)
WHERE s.uuid = row.source
MATCH (t:Entity)
USING INDEX t:Entity(uuid)
WHERE t.uuid = row.target
MATCH (s)-[r:CONSUMED]->(t)
DELETE r

其中 row.sourcerow.target 以及两个 UUID 字符串。问题是我收到错误,错误 - 无法在此上下文中使用索引提示

如果我增加查询以仅返回 Neo4j UI 中特定源节点和目标节点的关系,即

MATCH (s:Entity)
USING INDEX s:Entity(uuid)
WHERE s.uuid = '04bc79e1-a836-11e6-b841-22000bcec6a9'
MATCH (t:Entity)
USING INDEX t:Entity(uuid)
WHERE t.uuid = 'a245f46a-a837-11e6-b841-22000bcec6a9'
MATCH (s)-[r:CONSUMED]->(t)
RETURN r

没有抛出任何错误并且返回了关系,因此我有点困惑可能是什么问题?

最佳答案

[更新]

您的第二个查询还更改了 WHERE 子句,这就是它起作用的原因。

neo4j 目前不支持USING INDEX 子句用于将用于相互比较属性值的索引(就像您在第一个查询中所做的那样) .

注意:neo4j 的最新版本实际上能够在那种情况下使用索引,但如果您尝试指定 USING INDEX 子句作为提示,neo4j 会报错。这可能是一个错误。我提交了Issue 8463为此。

但是,当使用索引将属性值与标识符或文字进行比较(就像您在第二个查询中所做的那样)时,neo4j 对 USING INDEX 子句没有任何问题。

幸运的是,有一个简单的解决方法。您可以只为属性值创建标识符并改用这些标识符。例如,查看此处如何使用 WITH 子句:

UNWIND {rows} AS row
WITH row.source AS source, row.target AS target
MATCH (s:Entity)
USING INDEX s:Entity(uuid)
WHERE s.uuid = source
MATCH (t:Entity)
USING INDEX t:Entity(uuid)
WHERE t.uuid = target
MATCH (s)-[r:CONSUMED]->(t)
DELETE r

关于强制索引的 Neo4j 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40896132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com