Comment stocker de l'arbre de données dans un Lucene/Solr/Elasticsearch indice ou d'un NoSQL db?
Dire à la place de documents que j'ai de petits arbres que j'ai besoin de stocker dans un index Lucene. Comment dois-je faire?
Un exemple de nœud dans l'arborescence:
class Node
{
String data;
String type;
List<Node> children;
}
Dans le nœud au-dessus de la "data" membre de la variable est une chaîne séparée par des espaces de paroles, de sorte que doit être la recherche sur le texte intégral. Le "type" variable membre est juste un seul mot.
La requête de recherche sera d'un arbre et de recherche à la fois les données et le type de chaque nœud et aussi la structure de l'arbre pour un match. Avant d'appariement à l'encontre d'un nœud enfant, la requête doit d'abord correspondre le nœud parent de données et le type. La correspondance approximative sur la valeur des données est acceptable.
Quel est le meilleur moyen de l'indice de ce genre de données? Si Lucene ne prend pas directement en charge l'indexation de ces données, puis cela peut-il être fait par Solr ou Elasticsearch?
J'ai pris un coup d'oeil rapide à neo4j, mais il semble que pour stocker un ensemble de graphique dans la db, c'est pas une grande collection (dire des milliards ou des milliers de milliards) de petites structures en arbre. Ou ma compréhension était mal?
Aussi, est un non-Lucene base NoSQL solution est plus adapté pour cela?
Les requêtes seront appariés contre la structure de l'arbre et de l'arbre de données. Donc, si les données en Noeuda a déjà été jumelé puis l'apparition de FOO dans le NodeB constituera un jeu complet.
Vous dites FOO doit être en Noeuda a et B? Ou ce type doit correspondre à Noeuda, mais vous n'avez pas de soins si le type de matches dans les NodeB.
TOTO ne sera jamais cherché dans l'isolement. La requête elle-même sera un arbre! Donc, on peut rechercher un arbre qui a Noeuda.data = "BARRE" et de son enfant NodeB.data = "FOO". Un match de succès seront tous les arbres dont le premier Nœud correspond à Noeuda (à la fois les données et le type) et de l'enfant nœud correspond à NodeB (type et données). Des correspondances approximatives sur la valeur des données est acceptable.
quelque chose comme neo4j serait probablement mieux
OriginalL'auteur Golam Kawsar | 2012-04-02
Vous devez vous connecter pour publier un commentaire.
Une autre approche consiste à stocker une représentation de l'actuel emplacement du nœud dans l'arbre. Par exemple, le 17e de la feuille de la 3e 2e nœud de niveau du 1er 1er au niveau du nœud de l'arbre 14 est représenté sous la forme 014.001.003.017.
En supposant que "treepath' est le champ nom de l'emplacement dans l'arborescence, vous serait interroger sur "treepath:014*" pour trouver tous les noeuds et des feuilles dans l'arbre 14. De même, pour trouver à tous les enfants de la 14e arbre vous serait interroger sur " treepath:014.*'.
Le problème majeur de cette approche est que le déplacement de branches nécessite une nouvelle commande de chaque branche au bout de la branche qui a été déplacé. Si vos arbres sont relativement statique, qui ne peut être qu'un problème mineur dans la pratique.
(J'ai vu cette approche appelée " chemin d'accès de l'énumération ou une Décimale de Dewey représentation.)
Bonjour @GolamKawsar, cette approche a également contribué à l'agrégation des hiérarchies sur chaque niveau?
OriginalL'auteur Mark Leighton Fisher
Cette exigence et la solution est capturé ici: Proposition de imbriquée docs
Cette conception a été par la suite mis en œuvre à la fois par cœur Lucene et Elastic Search.
Le BlockJoinQuery est au cœur de Lucene, mise en œuvre et l'Élastique de Recherche se tourner vers une mise en œuvre comme indiqué ici: Elastic search imbriquée docs
OriginalL'auteur MarkH
Je suggère de Neo4j.
L'arbre est, après tout, juste un de spécial, graphique sobre.
Découvrez cette grande discussion sur si vous devez stocker un arbre dans Neo4j:
http://www.mail-archive.com/[email protected]/msg03256.html
Le lien n'est pas rompu, j'ai juste vérifié.
Voici quelques endroits où vous pouvez trouver ce fil de discussion: lists.neo4j.org/pipermail/user/2010-April/003313.html neo4j.org/nabble/#nabble-td700300
Il ya des tas de choses concernant les structures en arbre dans Neo4j groupe d'utilisateur: groups.google.com/forum/?fromgroups#!searchin/neo4j/tree
Grâce mbonaci. Le lien ne fonctionnait pas quand j'ai d'abord essayé (j'ai essayé à quelques reprises). Je vais consulter les liens que vous avez souligné. Merci!
OriginalL'auteur Marko Bonaci
Il y a un projet de Sirène http://rdelbru.github.io/SIREn
qui traite de la "profondeur" des arbres, de l'adressage. Utilise en interne Dewey numérotation (http://www.ipl.org/div/farq/deweyFARQ.html) ....
OriginalL'auteur maryoush