我有一个包含两个主表的数据库:
- 组件表(50M 行),
- 装配表(100K 行),
..以及它们之间的多对多关系(每个组件大约有 100K 个组件),因此总共有 10G 关系。
索引组件的最佳方法是什么,以便我可以查询给定程序集的索引?鉴于关系的数量,我不想将它们导入到 Lucene 索引中,而是正在寻找一种方法来动态“加入”我的外部表。
我有一个包含两个主表的数据库:
..以及它们之间的多对多关系(每个组件大约有 100K 个组件),因此总共有 10G 关系。
索引组件的最佳方法是什么,以便我可以查询给定程序集的索引?鉴于关系的数量,我不想将它们导入到 Lucene 索引中,而是正在寻找一种方法来动态“加入”我的外部表。
Solr 支持多值字段。如果 Lucene 本身支持它们,则不是肯定的。对我来说已经有一段时间了。如果只有一个实体是可搜索的,您提到的是组件,我将使用名为“程序集”或“程序集Ids”或类似字段的所有组件索引所有组件,并包含识别程序集所需的任何元数据。
然后你可以搜索组件
assemblyIds:(1, 2, 3)
在装配体 1、2 或 3 中查找零部件。
简而言之,您必须先处理数据并为其编制索引,然后才能进行搜索。因此,没有办法只是将 Lucene“插入”到某些数据或数据库中,而是您必须将其自身的数据插入(处理、解析、分析、索引和查询)到 Lucene。
rustyx:“我的数据大多是静态的。我什至可以使用只读索引。”
在这种情况下,您可以自己使用 Lucene。您可以迭代数据源以将所有多对多关系添加到 Lucene 索引。您是如何得出“100GB”大小的?人们使用 Lucene 索引数百万个文档,我认为索引对您来说不是问题。
您也可以在具有“程序集”字段的文档中将多个字段实例添加到具有不同值(“组件”)的索引中。
rustyx:“我正在寻找一种方法来“加入”Lucene 搜索与我的外部数据源动态“
如果您需要无缝的东西,您可以尝试以下框架,它就像关系数据库和 Lucene Index 之间的桥梁。
Hibernate Search:在该教程中,您可以搜索“@ManyToMany”关键字以找到教程中的确切部分以获得一些想法。