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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
Cypher Neo4j查询_Neo4j_Cypher - Fatal编程技术网

Cypher Neo4j查询

Cypher Neo4j查询,neo4j,cypher,Neo4j,Cypher,我正在开发某种社交琐事游戏,其中我的主要数据库是Neo4j。我在一个特定的用例中遇到了困难 我有两个与对手节点相关的挑战节点: (opponent1)-[:OPPONENT]->(challenge)<-[:OPPONENT]-(opponent2) 每个主题都涉及许多问题: subject-[:HAS]->question 如果对手在出现以下关系之前回答了特定问题: opponent-[:ANSWER]->question 用例:我需要为挑战检索X个问题(两个对手

我正在开发某种社交琐事游戏,其中我的主要数据库是Neo4j。我在一个特定的用例中遇到了困难

我有两个与对手节点相关的挑战节点:

(opponent1)-[:OPPONENT]->(challenge)<-[:OPPONENT]-(opponent2)
每个主题都涉及许多问题:

subject-[:HAS]->question
如果对手在出现以下关系之前回答了特定问题:

opponent-[:ANSWER]->question
用例:我需要为挑战检索X个问题(两个对手都没有回答)

我有以下密码查询:

START challenge=node({0}) , subject=node({1}) 
MATCH (opponent1)-[:OPPONENT]->(challenge)<-[:OPPONENT]-(opponent2) 
WITH opponent1,opponent2,subject
MATCH (subject)-[:HAS]->(question) 
WHERE  length(opponent1-[:ANSWER]->question) = 0 and length(opponent2-[:ANSWER]->question) = 0 
return question limit {2}
首先通过模板创建的问题意味着特定类别中的所有问题在数据库中都有顺序ID,因此上述查询检索同一类别中的问题


我希望能够随机检索挑战性问题。另外,从性能的角度来看,查询结构是否正确?

我不知道如何获得随机结果的原生方法,这里已经有人问过了:

关于查询,取决于数据,但我更愿意尝试以下方法:

START challenge=node({0}) , subject=node({1})
MATCH (opponent1)-[:OPPONENT]->(challenge)<-[:OPPONENT]-(opponent2)
WITH opponent1,opponent2,subject
MATCH (subject)-[:HAS]->(question)
WHERE not(opponent1-[:ANSWER]->question) and not (opponent2-[:ANSWER]->question)
return question limit {2} 
START challenge=node({0}),subject=node({1})
比赛(对手1)-[:对手]->(挑战)(问题)
其中非(对立面1-[:回答]->问题)和非(对立面2-[:回答]->问题)
返回问题限制{2}

Hi,感谢您对查询的改进。。在您发送的链接中,解决方案是执行X个查询以获得X个随机问题。。我正在寻找一种查询解决方案……据我所知,cypher中没有与psql
orderbyrandom()等价的功能。您可以尝试获取所有结果,然后在后面的代码中按随机数过滤它们。我们想在cypher中添加random()和markov()(根据权重返回随机路径)作为函数,但还没有这样做。
question-[:TEMPLATE]->template
START challenge=node({0}) , subject=node({1})
MATCH (opponent1)-[:OPPONENT]->(challenge)<-[:OPPONENT]-(opponent2)
WITH opponent1,opponent2,subject
MATCH (subject)-[:HAS]->(question)
WHERE not(opponent1-[:ANSWER]->question) and not (opponent2-[:ANSWER]->question)
return question limit {2}