我目前正在玩弄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检查的时候,我可以看到这样的结果存在。所以如果有人有答案,我很乐意提供更多的信息,并尝试你可能有的任何解决方案。谢谢马特。
经过一些额外的搜索,我似乎遇到了与这里描述的相同的问题:https://groups.google.com/forum/#!topic/neo4j/7ePLU8y93h8
我必须将我的查询拆分为两个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;