2014-08-27 4 views
2

J'ai un graphique neo4j avec la structure suivante.Neo4j Relationship Index - Recherche sur la propriété de relation

(compte) --- [Transaction] --- (compte)

transaction est une relation de Neo4j et compte est un noeud.

Il y a définir diverses propriétés de chaque transaction, telles que l'ID de transaction, le montant, la date et diverses autres informations bancaires.

Je peux lancer une recherche par identifiant de compte, et ça marche bien. Cependant, lorsque je recherche par ID de transaction, neo4J recherche tout le graphique au lieu d'utiliser l'index, et la recherche échoue.

Je crée des index à l'aide org.neo4j.unsafe.batchinsert.BatchInserterImpl.createDeferredSchemaIndex() pour les Account.number et Transaction.txid. L'index semble fonctionner pour les recherches de compte (noeud) mais pas pour les recherches de transaction (relation). (Je l'ai également permis auto index pour le noeud et la relation, mais il ne marche pas changer les choses)

Je pense que l'indexation sur les propriétés de relation ne sont pas pris en charge, si l'on considère faire des nœuds intermédiaires pour contenir des informations de propriété. Cependant, je préférerais m'en tenir à mon design original si possible.

Une idée de comment procéder?

Répondre

4

Vous pouvez utiliser legacy indexes ou aux relations d'index. Les index de schéma ne prennent pas en charge les relations d'indexation.

La raison: En général, vous utilisez des noeuds d'utilisation pour modéliser les choses # # ou # entités # dans votre domaine. Relier votre monde et relier les nœuds dans un contexte sémantique. Lorsque vous suivez ce modèle, vous n'avez généralement pas besoin d'indexer les relations, car vos requêtes commencent toujours par # chose # qui est toujours un nœud.

Dans votre modèle, vous devez repenser la modélisation, je suppose que cela pourrait donner un sens d'avoir

(account)-[:send]->(transaction)-[:to]->(account). 

Donc, les transactions sont une chose sur elle-même et par conséquent deviennent des nœuds.

+0

Salut, c'est ce que je soupçonnais. Juste pour confirmer, il n'est pas supporté pour interroger l'index hérité de chiffrement, non? – Imme22009

+1

bien sûr, vous pouvez interroger un index hérité dans cypher en utilisant la clause start: pour l'autoindex utiliser 'START r = relation: relation_auto_index (clé = 'valeur') return r', pour un index hérité normal:' start r = relation: (clé = 'valeur') ... ' –

+0

Merci, je vais essayer celui-là – Imme22009

Questions connexes