当前位置: 首页 > 面试题库 >

如何将树数据存储在Lucene / Solr / Elasticsearch索引或NoSQL数据库中?

叶弘深
2023-03-14
问题内容

说说我有一些小树而不是文档,我需要将它们存储在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. ”上查询。

这种方法的主要问题在于,移动分支需要在移动分支之后对每个分支重新html" target="_blank">排序。如果您的树木是相对静态的,那么实际上这只是一个小问题。

(我已经看到这种方法称为“路径枚举”或“杜威十进制”表示形式。)



 类似资料:
  • 我已经通过了lucene索引机制。我有一些疑问,我找不到一个直截了当的答案,我仍然对我在几篇参考文献中的阅读感到困惑。 考虑使用Lucene对数据库表进行索引。 假设该表有10列,其中很少有caseid、modifiedby、modifiedtime、casename、legalname等。。。 现在,如果我创建一个索引的情况下,那么在搜索是不是可以搜索的基础上修改字段??? 假设我在2列case

  • 主要内容:在Apache Solr中的索引,使用Post命令添加文档,使用Solr Web界面添加文档,使用Java Client API添加文档一般来说,索引是系统地排列文档或(其他实体)。索引使用户能够在文档中快速地查找信息。 索引集合,解析和存储文档。 索引是为了在查找所需文档时提高搜索查询的速度和性能。 在Apache Solr中的索引 在Apache Solr中,我们可以索引(添加,删除,修改)各种文档格式,如xml,csv,pdf等。可以通过几种方式向Solr索引添加数据。 在本章中

  • 我创建了一个TextView,它以多行显示值 ,我希望将该值保留在SQLite数据库中。这是我使用的代码: 问题是当我保存值时,整个值被插入到一个单元格中。我希望每行的值分开,然后插入到每行的单个单元格中,尽管我使用扫描器方法插入数据,但它不起作用。那有什么办法吗?

  • 本文向大家介绍NoSQL数据库,包括了NoSQL数据库的使用技巧和注意事项,需要的朋友参考一下 这些用于大型分布式数据集。关系数据库可以有效地处理一些大数据性能问题,而NoSQL数据库可以轻松解决此类问题。在分析可能存储在云的多个虚拟服务器上的大型非结构化数据时,非常有效。

  • 本文向大家介绍如何使用Python将数据存储和检索到Sqlite3数据库中?,包括了如何使用Python将数据存储和检索到Sqlite3数据库中?的使用技巧和注意事项,需要的朋友参考一下 您可以使用sqlite3模块轻松地将日期存储和检索到Sqlite3数据库中。在数据库中插入日期时,直接传递日期,Python会自动处理它。 示例 输出结果 这将给出输出- 现在,当您从数据库中获取值时,您将获得已

  • 问题内容: 我在ElasticSearch和Rails时遇到问题,由于attr_protected,其中一些数据未正确索引。Elastic Search在哪里存储索引数据?检查实际的索引数据是否错误将很有用。 检查映射对您没有帮助,将列出该字段。 问题答案: 探索您的ElasticSearch集群的最简单方法可能是使用elasticsearch -head。 您可以通过以下方式安装它: 然后(假设