我有一个图表,其中包含类别层次结构(类似于购物网站上的产品类别,例如服装 --> 男装 --> 衬衫 --> 短袖 --> ...)。我有一些用例,需要将整个层次结构作为树检索(在本例中是嵌套的 ruby 和/或 javascript 对象)。我能够提出的唯一解决方案是使用NODES()检索每个唯一路径,然后将其转换为客户端中的嵌套对象。这样的性能显然是有问题的。
MATCH (store:Store),
(store)-[:hasCategory]->(category:Category),
categories=(category)-[:narrower*0..]->(:Category)
WHERE store.name = {name}
RETURN store, NODES(categories) AS categories
Run Code Online (Sandbox Code Playgroud)
这将返回基本上是如下路径的结果行:
[store, [category1, narrower_category1, narrower_category2, ...]]
Run Code Online (Sandbox Code Playgroud)
在 cypher 中处理这个问题的正确方法是什么,而不需要多次返回服务器或像上面的查询那样大量获取数据?
在 cypher 中处理这个问题的正确方法是什么,而不需要多次返回服务器或像上面的查询那样大量获取数据?
如果您有一个很大的层次结构,那么您将有两个基本选项:一次获取层次结构的几个级别(需要返回服务器以获取下一个块),或者您可以像您一样获取整个内容正在做。我没有看到第三个选项,因此如果没有这些功能中的任何一个,可能无法获得大的层次结构。
你正在做的事情似乎没问题,但如果没有进一步澄清,你的问题似乎是不可能的。你目前所做的事情有什么问题吗?您如何使用层次结构以及为什么需要同时使用它?例如,如果我在亚马逊上,他们有一个巨大的购物层次结构。通常他们只会先向我展示顶级产品(男装、女装、电子产品)。然后,当我单击“电子产品”时,他们会向我显示下一个级别(“电子书阅读器”、“计算机”等)。恕我直言,这通常是要走的路——多次访问数据库,一次一层层次结构。这适用于网页上的树视图和 AJAX 调用。当用户展开树时,您可以对服务器执行 AJAX 回调,并填充子树。
层次结构中的每个调用可能是:
MATCH (category:Category { id: "whatever user picked" })-[:narrower]->(children:Category)
RETURN children
ORDER BY children.name;
Run Code Online (Sandbox Code Playgroud)
如果这种增量方法(一次一个级别)不适用于您的用例,那么您将返回获取整个内容,这不可避免地会是“一次大量数据获取”。
| 归档时间: |
|
| 查看次数: |
4521 次 |
| 最近记录: |