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?

Ce que vous cherchez à trouver lors de la recherche. Si vous avez NodeB comme un enfant de Noeuda, a et B a texte FOO, lors de la recherche de FOO, voulez-vous retourner NodeB, ou Noeuda?
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