0

我意识到这可能不是理想的用法,但除了 Neo4j 的所有图形优点之外,我想以表格格式显示节点集合,例如 People,具有用于排序和过滤的索引属性

我猜节点的类型可以存储为链接,比如 Bob -> type -> Person,这将允许我们检索所有 People

以下是否可以有效地(索引?)并以可扩展的方式完成?

  • 检索所有 People 节点并显示他们的所有姓名、年龄、出生城市等(注意:这些数据中的一些是属性,一些是指向其他节点的链接(为了表格显示和简单起见,可以将其非规范化为属性)
  • 显示所有按年龄排序的人
  • 显示所有年龄 < 30 的人

还有一个快速的如何做上述(或文档中描述如何做的某个地方的链接)会很可爱

非常感谢!

哦,如果上面不是一个好主意,请提出一个存储解决方案,它允许图形检索和关系检索

4

2 回答 2

1

如果要对这些人员节点进行操作,可以将它们放入索引中(默认为 Lucene),然后使用 Lucene 检索和排序节点(例如,请参阅How do I sort Lucene results by field value using a HitCollector?关于如何在java中进行自定义排序)。例如,这会让你按年龄排序的人等。Neo4j 中的代码可能看起来像

Transaction tx = neo4j.beginTx();
idxManager = neo4j.index()
personIndex = idxManager.forNodes('persons')
personIndex.add(meNode,'name',meNode.getProperty('name'))
personIndex.add(youNode,'name',youNode.getProperty('name'))
tx.success()
tx.finish()


'*** Prepare a custom Lucene query context with Neo4j API ***'
query = new QueryContext( 'name:*' ).sort( new Sort(new SortField(     'name',SortField.STRING, true ) ) )
results = personIndex.query( query )

对于组合索引查找和图遍历,Cypher是一个不错的选择,例如

START people = node:people_index(name="E*") MATCH people-[r]->() return people.name, r.age order by r.age asc

为了返回节点和关系的数据。

于 2012-09-21T05:59:06.090 回答
1

当然,这很容易通过 Neo4j 查询语言Cypher实现。

例如:

start cat=node:Types(name='Person') 
match cat<-[:IS_A]-person-[born:BORN]->city
where person.age > 30
return person.name, person.age, born.date, city.name
order by person.age asc
limit 10

您可以在我们的密码控制台中进行试验。

于 2012-09-21T17:50:10.953 回答