Скажем, вместо документов у меня есть небольшие деревья, которые мне нужно хранить в индексе Lucene. Как мне это сделать?
Пример узла в дереве:
class Node
{
String data;
String type;
List<Node> children;
}
В вышеприведенном узле переменная-член «data» - это строка слов, разделенных пробелами, так что она должна быть доступна для полнотекстового поиска. Переменная типа "type" - это просто одно слово.
Поисковый запрос будет представлять собой само дерево и будет искать как данные, так и тип в каждом узле, а также структуру дерева на предмет соответствия. Перед сопоставлением с дочерним узлом запрос должен сначала сопоставить данные и тип родительского узла. Приблизительное сопоставление по значению данных допустимо.
Как лучше всего индексировать данные такого рода? Если Lucene не поддерживает индексацию этих данных напрямую, может ли это сделать Solr или Elasticsearch?
Я быстро взглянул на neo4j, но, похоже, в БД хранится целый граф, а не большая коллекция (скажем, миллиарды или триллионы) небольших древовидных структур. Или мое понимание было неверным?
Кроме того, решение NoSQL, не основанное на Lucene, лучше подходит для этого?