Database 编写动态密码查询-Neo4j

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

我正在使用数据库neo4j进行一个web项目。我希望用户根据选择的标记选择标记(数据库中的单独节点)并返回内容(也是数据库节点)

我想根据用户已经选择的标签返回与用户相关的标签

我想到的查询如下所示:

        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团队的其他成员正在做着惊人的工作,我真的尊重您与社区的合作。那么,您选择了什么路径来形成这些动态标记呢?还有如果我们必须使用动态路径动态地形成遍历查询呢?