0

これは理想的な使い方ではないかもしれませんが、Neo4j のすべての優れたグラフィック機能とは別に、ノードのコレクション、たとえば People を、並べ替えとフィルタリング用のインデックス付きプロパティを持つ表形式で表示したいと思います。

ノードのタイプをリンクとして保存できると思います。たとえば、Bob -> type -> Person のようにすると、すべての人を取得できます。

次のことを効率的に (インデックス化して)、スケーラブルに行うことは可能ですか?

  • すべての People ノードを取得し、名前、年齢、出生地などをすべて表示します (注: このデータの一部はプロパティになり、一部は他のノードへのリンクになります (表の表示と単純化のために、プロパティとして非正規化できます)。
  • 年齢で並べ替えられたすべての人を表示
  • 年齢が 30 歳未満のすべての人を表示

また、上記の簡単な方法(または方法を説明するドキュメント内の場所へのリンク)も素敵です

どうもありがとう!

ああ、上記が良い考えでない場合は、グラフのような検索とリレーショナルな検索の両方を可能にするストレージ ソリューションを提案してください。

4

2 に答える 2

1

これらの人物ノードを操作したい場合は、それらをインデックス (デフォルトは Lucene) に配置し、Lucene を使用してノードを取得して並べ替えることができます (たとえば、HitCollector を使用してフィールド値で Lucene の結果を並べ替えるにはどうすればよいですか?を参照)。 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

cypher consoleで試すことができます。

于 2012-09-21T17:50:10.953 に答える