Play!Frameworkアプリケーション でSpringデータを使用してNeo4j-Spatialを使用しています。
データベースに格納したいUserタイプの @NodeEntity と、ロケーションベースのクエリ用の空間インデックスがあります。
私が見た例では、GraphDatabaseService を使用してノードを作成しています。
Node stadiumNode = graphDatabaseService.createNode();
次に、このノードを空間インデックスに追加します。
Index<Node> index = graphDatabaseService.index().forNodes(indexLayerName, config)`;
stadiumNode.setProperty("wkt", String.format("POINT(%s %s)", lat, lon));
index.add(stadiumNode, "dummyA", "dummyB");
ただし、 Node には特定のタイプ ( Userなど) が関連付けられていません。そのためには、まず以下を作成する必要がありますinterface UserRepository extends GraphRepository<User>
。
@Autowired
private UserRepository userRepository;
次に、User nodeEntity をリポジトリに追加します。
User user = new User();
userRepository.save(user);
ただし、これにより3 つのノードが作成されます(空間インデックス RTree に 1 つ、neo4j グラフに 2 つ)。これを行う正しい方法は何ですか?私はちょうど2つのノードが欲しい:
- neo4j グラフのUserタイプの 1 つのノード
- 上記のノードに関連付けられた位置情報を含む 1 つのノード。