说说我有一些小树而不是文档,我需要将它们存储在Lucene索引中。我该怎么做呢?
树中的一个示例节点:
class Node { String data; String type; List<Node> children; }
在上面的节点中,“数据”成员变量是用空格分隔的字符串,因此需要全文搜索。“类型”成员变量只是一个单词。
搜索查询本身将是一棵树,并将搜索每个节点中的数据和类型,以及树的结构以查找匹配项。在与子节点匹配之前,查询必须首先与父节点数据和类型匹配。可以对数据值进行近似匹配。
索引此类数据的最佳方法是什么?如果Lucene不直接支持索引这些数据,那么Solr或Elasticsearch可以做到吗?
我快速浏览了neo4j,但它似乎将整个图形存储在db中,而不是大量的小树结构集合(例如数十亿或数万亿美元)。还是我的理解错了?
另外,非基于Lucene的NoSQL解决方案是否更适合此?
另一种方法是将当前节点位置的表示形式存储在树中。例如,第14棵树的第1个第1级节点的第3个第2级节点的第17个叶将表示为 014.001.003.017 。
假设“ treepath”是树位置的字段名称,则可以在“ treepath:014 ”上查询以找到第14棵树中的所有节点和叶子。同样,要查找第14棵树的所有子代,您可以在“ treepath:014. ”上查询。
这种方法的主要问题在于,移动分支需要在移动分支之后对每个分支重新排序。如果您的树木是相对静态的,那么实际上这只是一个小问题。
(我已经看到这种方法称为“路径枚举”或“杜威十进制”表示形式。)