1

私はDjangoとneo4jの初心者です。Django 1.4.5、neo4j 1.9.2、および neo4django 0.1.8 を使用しています

個人ノードの NodeModel を作成し、「所有者」および「名前」プロパティでインデックスを作成しました。ここに私のmodels.pyがあります:

from neo4django.db import models as models2

class person_conns(models2.NodeModel):
     owner = models2.StringProperty(max_length=30,indexed=True)
     name = models2.StringProperty(max_length=30,indexed=True)
     gender = models2.StringProperty(max_length=1)
     parent = models2.Relationship('self',rel_type='parent_of',related_name='parents')
     child = models2.Relationship('self',rel_type='child_of',related_name='children')
     def __unicode__(self):
          return self.name

Neo4j サーバーに接続する前に、自動インデックス作成を True に設定し、次のように conf/neo4j.properties ファイルにインデックス可能なキーを指定しました。

# Autoindexing

# Enable auto-indexing for nodes, default is false
node_auto_indexing=true

# The node property keys to be auto-indexed, if enabled
node_keys_indexable=owner,name

# Enable auto-indexing for relationships, default is false
relationship_auto_indexing=true

# The relationship property keys to be auto-indexed, if enabled
relationship_keys_indexable=child_of,parent_of

Neo4j: Step by Stepに従って、上記のファイルを更新する自動インデックスを作成し、neo4j サーバーに node_auto_index を手動で作成しました。

以下は、neo4j データベースで django の syndb を実行し、手動で自動インデックスを作成した後に、neo4j サーバーで作成されたインデックスです。

  1. graph-person_conns lucene
    {"to_lower_case":"true", "_blueprints:type":"MANUAL","type":"fulltext"}
  2. node_auto_index lucene {"_blueprints:type":"MANUAL", "type":"exact"}

https://github.com/scholrly/neo4django/issues/123で提案されているように、connection.cypher(queries) を使用して neo4j データベースにクエリを実行しました

例えば:

listpar = connection.cypher("START no=node(*) RETURN no.owner?, no.name?",raw=True)

上記は、すべてのノードの所有者と名前を正しく返します。しかし、次の場合のように、「数値」または「*」の代わりにインデックス付きプロパティをクエリしようとすると:

listpar = connection.cypher("START no=node:node_auto_index(name='s2') RETURN no.owner?, no.name?",raw=True)

上記は0行です。

listpar = connection.cypher("START no=node:graph-person_conns(name='s2') RETURN no.owner?, no.name?",raw=True)

上記は

例外値:
エラー [400]: 不正な要求です。リクエストの構文が正しくないか、サポートされていないメソッドです。無効なデータが送信されました: (' expected but-' がグラフの後に見つかりました

graph-person_conns の代わりに name, person_conns などの他の文字列を試しましたが、特定のインデックスが存在しないというエラーが発生するたびに。インデックスを追加するときに間違っていますか?

私のプロジェクトは主に、プロパティに基づいてノードをフィルタリングすることに依存しているため、この部分は非常に重要です。任意のポインタや提案をいただければ幸いです。ありがとうございました。

これは、stackoverflow に関する私の最初の投稿です。そのため、情報が不足していたり​​、紛らわしい記述がある場合は、しばらくお待ちください. ありがとうございました。

更新: 助けてくれてありがとう。他の人のために、サイファークエリを使用して2つのノード間の最短パスをトラバース/検索する方法の例を挙げたいと思います。

from neo4django.db import connection

results = connection.cypher("START source=node:`graph-person_conns`(person_name='s2sp1'),dest=node:`graph-person_conns`(person_name='s2c1') MATCH p=ShortestPath(source-[*]->dest) RETURN extract(i in nodes(p) : i.person_name), extract(j in rels(p) : type(j))")

これは、グラフ上の s2sp1 と s2c1 という名前のノード間の最短経路を見つけることです。Cypher クエリは非常に優れており、ホップやリレーションの種類などを制限するノードをトラバースするのに役立ちます。

誰かがこの方法のパフォーマンスについてコメントできますか? また、Django から Neo4j にアクセスするための効率的な方法があれば提案してください。ありがとうございました :)

4

1 に答える 1