【发布时间】:2014-01-26 01:04:00
【问题描述】:
我正在使用数据库 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 个标签?)
有没有更好的方法来做到这一点?
任何见解都将不胜感激。
【问题讨论】:
-
那么你选择了什么样的路径来形成这些动态标签?另外,如果我们必须使用动态路径动态形成遍历查询怎么办?
标签: database graph neo4j cypher