Neo4j Cypher查询:将多个关系匹配到一个节点

时间:2013-11-30 15:12:33

标签: neo4j cypher

我目前正在玩弄Neo4j和cypher, 我一直在四处寻找,但我找不到解决方案。 所以我走了:

我有一个项目,我解析书籍集合,我使用neo4j来存储单词,句子和章节之间的关系。

word1-[:NEXTWORD]->word2 -[:NEXTWORD]->word3...
word-[:COMPOSESENTENCE]->sentence-[:COMPOSECHAPTER]->chapter->[:COMPOSEBOOK]->book

我没有在两个单词之间建立多个关系,而是添加了一个计数器,每次单词连续时我都会增加

我的目标是编写一个Cypher查询来匹配用户查询,例如: “一次”一次(“一次”是连续的话)

START 
    word1=node:node_auto_index(WORD='once'), 
    word2=node:node_auto_index(WORD='upon') 
    word3=node:node_auto_index(WORD='a') 
    word4=node:node_auto_index(WORD='time') 
MATCH 
    word1-[:COMPOSESENTENCE]->sentence-[:COMPOSECHAPTER]->chapter-[:COMPOSEBOOK]->book
    word2-[:COMPOSESENTENCE]->sentence, 
    word3-[:COMPOSESENTENCE]->sentence,
    word4-[:COMPOSESENTENCE]->sentence,  
    word1-[:NEXTWORD]->word2

RETURN 
    version.VERSIONNAME, book.BOOKNAME, chapter.CHAPTERNUMBER, sentence.SENTENCESTRING;

但是当这样做时我没有得到任何结果,当用neoclipse检查时我可以看到存在这样的结果。所以,如果有人有答案,我很乐意提供更多信息,并尝试你可能有的解决方案。 谢谢马特。

1 个答案:

答案 0 :(得分:1)

经过一些额外的搜索,似乎我遇到了与此处描述的相同的问题: https://groups.google.com/forum/#!topic/neo4j/7ePLU8y93h8

我必须在两个带有WITH的MATCH子句中拆分我的查询,其中我描述了之前使用的标识符和下一个MATCH子句所需的标识符

START 
    word1=node:node_auto_index(WORD='once'), 
    word2=node:node_auto_index(WORD='upon') 
    word3=node:node_auto_index(WORD='a') 
    word4=node:node_auto_index(WORD='time') 
MATCH 

    word2-[:COMPOSESENTENCE]->sentence, 
    word3-[:COMPOSESENTENCE]->sentence,
    word4-[:COMPOSESENTENCE]->sentence,  
    word1-[:NEXTWORD]->word2
WITH 
    sentence
MATCH
    sentence-[:COMPOSECHAPTER]->chapter-[:COMPOSEBOOK]->book

RETURN 
    version.VERSIONNAME, book.BOOKNAME, chapter.CHAPTERNUMBER, sentence.SENTENCESTRING;