2016-05-21 2 views
1

Je suis à la recherche dans le client Everyman Neo4j (https://github.com/jadell/neo4jphp/wiki)Neo4j index création php

Il semble très prometteur et confortable à utiliser. Cependant, je suis un peu confus au sujet des index. Je sais que dans Neo4j vous pouvez ajouter un index:

CREATE INDEX ON :Person(name) 

Si je me souviens bien, cela indexerait automatiquement tous les nœuds de la personne par leur nom.

Dans la bibliothèque cliente Everyman, la section sur les indices montre que vous pouvez créer et ajouter des index à des nœuds aime ceci:

$shipIndex = new Everyman\Neo4j\Index\NodeIndex($client, 'ships'); 

(PS: Qu'est-ce que cette ligne ci-dessus font exactement)

$heartOfGold = $client->makeNode() 
    ->setProperty('propulsion', 'infinite improbability drive') 
    ->save(); 

// Index the ship on one of its properties 
$shipIndex->add($heartOfGold, 'propulsion', $heartOfGold->getProperty('propulsion')); 

Maintenant, ma question. Quand dois-je ajouter manuellement des index dans mon code PHP comme dans l'exemple ci-dessus, et quand dois-je ajouter l'index à ma base de données Neo4j et me fier à l'indexation automatique? Et dans ce dernier cas, puis-je faire également l'utilisation de l'index de recherche dans le code comme ceci:

$match = $shipIndex->findOne('captain', 'Zaphod'); 

?

Répondre

1

Les premières méthodes ci-dessus ajoutent le noeud et sa propriété de propulsion à l'index lucene. Ce n'est pas que ce genre d'index soit marqué comme héritage depuis quelques temps maintenant.

indices de schéma fonctionne comme suit maintenant:

Vous créez un index sur une combinaison étiquette/propriété, par exemple, si vous savez que vous devrez trouver des utilisateurs par leur propriété de connexion, il est généralement conseillé d'ajouter un index pour la recherche rapide:

CREATE INDEX ON :User(login); 

Ce type d'index, depuis Neo4j 3.0 peut également être utilisé avec la clause CONTAINS, par exemple me récupérer tous les utilisateurs où la connexion contient les lettres neo:

MATCH (n:User) WHERE n.login CONTAINS 'neo' RETURN n 

utilisera l'index créé ci-dessus pour une récupération rapide. (Nb: à partir de CONTIENT maintenant est sensible à la casse)

Pour une explication de la différence totale entre l'héritage et l'index de schéma, il est très bien expliqué ici: Neo4j auto-index, legacy index and label schema: differences for a relative-to-a-node full-text search

Malheureusement, la bibliothèque que vous avez mentionné n'est plus maintenu, comme vous pouvez voir à partir de l'historique des commits https://github.com/jadell/neo4jphp/commits/master

Neo4j évolue beaucoup, en particulier la version 3.0 a maintenant un nouveau protocole binaire disponible qui améliore les performances et réduit la latence par rapport à http.

Je vous conseillerais (avertissement: je suis l'auteur de la bibliothèque suivante) d'utiliser un client à jour comme https://github.com/graphaware/neo4j-php-client. (Notez qu'il s'agit d'un pilote pur, cela n'offre pas de fonctionnalités ogm par exemple, vous devrez écrire vos propres requêtes Cypher)