Как хранить данные дерева в индексе Lucene/Solr/Elasticsearch или в базе данных NoSQL?

Скажем, вместо документов у меня есть небольшие деревья, которые мне нужно сохранить в индексе Lucene. Как мне это сделать?

Пример узла в дереве:

class Node
{
    String data;
    String type;
    List<Node> children;
}

В приведенном выше узле переменная-член «данные» представляет собой строку слов, разделенных пробелами, поэтому она должна быть доступна для полнотекстового поиска. Переменная-член «тип» — это всего лишь одно слово.

Поисковый запрос будет сам по себе деревом и будет искать как данные, так и тип в каждом узле, а также структуру дерева для совпадения. Перед сопоставлением с дочерним узлом запрос должен сначала сопоставить данные и тип родительского узла. Приблизительное совпадение по значению данных приемлемо.

Как лучше всего индексировать такие данные? Если Lucene напрямую не поддерживает индексирование этих данных, то могут ли это сделать Solr или Elasticsearch?

Я бегло взглянул на neo4j, но кажется, что он хранит в базе данных весь граф, а не большую коллекцию (скажем, миллиарды или триллионы) небольших древовидных структур. Или мое понимание было неправильным?

Кроме того, лучше ли для этого подходит NoSQL-решение, не основанное на Lucene?

13
задан Golam Kawsar 2 April 2012 в 03:55
поделиться