Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher FOREACH合并未命中索引_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher FOREACH合并未命中索引

Neo4j Cypher FOREACH合并未命中索引,neo4j,cypher,Neo4j,Cypher,我有一个参数化的密码查询: MERGE (p:Person {pid: {personId}}) ON CREATE SET p.value=rand() MERGE (c:Page {url: {pageUrl}}) ON CREATE SET c.value=rand() MERGE p-[:REL]->c FOREACH (tagValue IN {tags} | MERGE (t:Tag {value:tagValue}) MERGE c-[:hasTag]->t)

我有一个参数化的密码查询:

MERGE (p:Person {pid: {personId}}) ON CREATE SET p.value=rand()
MERGE (c:Page {url: {pageUrl}}) ON CREATE SET c.value=rand()
MERGE p-[:REL]->c
FOREACH (tagValue IN {tags} | 
  MERGE (t:Tag {value:tagValue})
  MERGE c-[:hasTag]->t)
这非常缓慢,分析显示:

    EmptyResult
      |
      +UpdateGraph(0)
        |
        +Eager(0)
          |
          +UpdateGraph(1)
            |
            +Eager(1)
              |
              +UpdateGraph(2)

    +----------------+------+--------+------------------------------+------------------------------------------------------------------------------+
    |       Operator | Rows | DbHits |                  Identifiers |                                                                        Other |
    +----------------+------+--------+------------------------------+------------------------------------------------------------------------------+
    |    EmptyResult |    0 |      0 |                              |                                                                              |
    | UpdateGraph(0) |    1 |  79222 |                              |                                                                      Foreach |
    |       Eager(0) |    1 |      0 |                              |                                                                              |
    | UpdateGraph(1) |    1 |      5 |           p, c,   UNNAMED163 |                                                                 MergePattern |
    |       Eager(1) |    1 |      0 |                              |                                                                              |
    | UpdateGraph(2) |    1 |     14 |                   p, p, c, c | 
MergeNode; {personId}; :Person(pid); MergeNode; {pageUrl}; :Page(url) |
    +----------------+------+--------+------------------------------+------------------------------------------------------------------------------+

    Total database accesses: 79241
如您所见,它显然没有使用我在:Tag(value)上定义的索引

有没有办法解决这个问题?我的想法越来越少,我开始认为这可能与


仅供参考,合并对我来说真的很方便,而且这个查询完全匹配(或者,如果它工作的话:)我需要的数据接收用法。

Hmmm,如果使用UNWIND而不是FOREACH,它是否使用索引

MERGE (p:Person {pid: {personId}}) ON CREATE SET p.value=rand()
MERGE (c:Page {url: {pageUrl}}) ON CREATE SET c.value=rand()
MERGE p-[:REL]->c
WITH c
UNWIND {tags} AS tagValue
MERGE (t:Tag {value:tagValue})
MERGE c-[:hasTag]->t

谢谢,很有魅力。放松确实会影响指数;我以前不懂这个用法,太好了。那么,您是否认为使用“展开”可以获得更好的性能?你怎么知道它在指数上?您能告诉我我们可以在“展开文档”页面上改进什么,以便更清楚地了解它的用途吗?最后我们有一个类似于此的示例,演示了如何合并事件集合,我看到了更好的性能。分析显示70 db的命中率,我认为这意味着它命中了索引:)您认为这个查询可以进一步优化吗?我有点完全错过了放松,我浏览了一下文档,所以我看不出我可以使用它。FOREACH听起来是一个明显的选择。