Database 编写动态密码查询-Neo4j
我正在使用数据库neo4j进行一个web项目。我希望用户根据选择的标记选择标记(数据库中的单独节点)并返回内容(也是数据库节点) 我想根据用户已经选择的标签返回与用户相关的标签 我想到的查询如下所示:Database 编写动态密码查询-Neo4j,database,graph,neo4j,cypher,Database,Graph,Neo4j,Cypher,我正在使用数据库neo4j进行一个web项目。我希望用户根据选择的标记选择标记(数据库中的单独节点)并返回内容(也是数据库节点) 我想根据用户已经选择的标签返回与用户相关的标签 我想到的查询如下所示: MATCH (tags:tag)-[:LINKED_WITH]-(content:content)-[:LINKED_WITH]-(previousTags:tag) WHERE //new tags must be connect
MATCH (tags:tag)-[:LINKED_WITH]-(content:content)-[:LINKED_WITH]-(previousTags:tag)
WHERE
//new tags must be connected to content that already selected tags are connected to
//for as many tags as the user has already selected
(previousTags.UID = {ID1} OR previousTags.UID = {ID2} OR previousTags.UID = {ID3})
//don't include tags that have already been selected in batch of new tags
//for as many tags as the user has already selected
AND NOT (tags.UID = {ID1} OR tags.UID = {ID2} OR tags.UID = {ID3})
RETURN tags.whatever
LIMIT 15
ODER BY tags.number_of_connections
因为查询取决于用户已经选择的标记数量,所以我必须使用字符串构建来动态编写查询
关于这一点,我有三个问题:
有没有一种方法可以在不构建字符串的情况下实现这一点
cypher/neo4j是用来处理这样的查询的吗?(特别是如果用户已经选择了10-15个标签?)
有没有更好的方法来实现这一点
任何见解都将不胜感激。请记住为
标记.UID添加索引
create constraint on (t:tag) assert t.UID is unique
您可以尝试在{selected_tags}中使用previous.UID
并传递一个字符串数组/集合,但它不支持索引查找:(
所以现在你必须坚持用线来建造
有一个用于java,也支持用于ruby的cypher dsl。这些可能适合您,不确定它们是否支持您查询所需的所有内容。谢谢您的回答,Michael。您和neo4j团队的其他成员正在做着惊人的工作,我真的尊重您与社区的合作。那么,您选择了什么路径来形成这些动态标记呢?还有如果我们必须使用动态路径动态地形成遍历查询呢?