首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j核心:使用订单加载RelationShips

Neo4j核心:使用订单加载RelationShips
EN

Stack Overflow用户
提问于 2014-05-15 20:51:42
回答 2查看 109关注 0票数 2

我正在尝试开发和应用,需要数百万人的关系。但是,当尝试根据创建时间(时间戳)使用cypher query或core java (解析所有关系)来获取最后一个关系时,它会花费很多时间。

一般来说,用户会从最后一个到第一个访问数据,可能只需要访问最后50个数据。那么我如何在加载数据时改变Neo4j的行为,以便从最后一个开始(即使是缓存中的数据),这样我就不需要对它们重新排序了。

致以问候。

EN

回答 2

Stack Overflow用户

发布于 2014-05-16 02:16:45

您可以为每个节点提供一个timestamp属性及其创建时间(可以使用Cypher timestamp()函数获得)。

然后,您可以匹配使用此子查询创建的最后50个查询(可以放在实际查询之前):

代码语言:javascript
复制
MATCH (n)
ORDER BY n.timestamp DESC
LIMIT 50
WITH n
// Place your actual query here. The variable 'n' will be a collection of the last 50 nodes created.

不幸的是,这不会很快,因为neo4j将遍历每个节点以找到具有最高timestamp值的节点。如果您只需要某些节点具有时间戳,那么您应该考虑为所有这些节点添加一个标签(比如‘timestamp’),并将MATCH (n)更改为MATCH (n:Timestamped)

票数 0
EN

Stack Overflow用户

发布于 2014-05-16 03:43:28

如果你有事件节点上的时间,你可以把它们放在时间树中,请看这里:

在Java API中,您可以对节点或关系使用遗留索引,将时间戳作为数值进行索引,然后使用lucene范围查询。

它看起来像这样:

代码语言:javascript
复制
Index<Node> timeIndex = db.index().forNodes("time");

timeIndex.add(node,"timestamp",ValueContext.indexNumeric(node.getProperty("timestamp"));

timeIndex.query(QueryContext.numericRange("timestamp",from,to));

请参阅QueryContext API

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23678766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档