Lucene指数是一个很大的多对多关系

时间:2013-03-02 23:35:23

标签: lucene

我有一个包含两个主表的数据库:

  1. 组件表(50M行),
  2. 程序集表(100K行),
  3. ..和它们之间的多对多关系(每个组件约100K组件),因此总共10G关系。

    索引组件的最佳方法是什么,以便我可以查询给定程序集的索引?考虑到关系的数量,我不想将它们导入到Lucene索引中,但我正在寻找一种在运行中与我的外部表“连接”的方法。

2 个答案:

答案 0 :(得分:1)

Solr支持多值字段。如果Lucene本能地支持他们,那么这不是正面的。对我来说已经有一段时间了。如果只有一个实体是可搜索的,你提到的是组件,我会用一个名为“assemblies”或“assemblyIds”的字段或类似的东西索引所有组件,并包含识别组件所需的任何元数据。

然后您可以使用

搜索组件
assemblyIds:(1, 2, 3)

在程序集1,2或3中查找组件。

答案 1 :(得分:0)

简而言之,您必须先处理数据并将其编入索引才能进行搜索。因此,没有办法只是插入"插件" Lucene对某些数据或数据库,而不是你自己的数据插件(处理,解析,分析,索引和查询)到Lucene。


rustyx:"我的数据大多是静态的。我甚至可以使用只读索引。"

在这种情况下,你可以自己使用Lucene。您可以迭代数据源以将所有多对多关系添加到Lucene索引。你是怎么想出那个" 100GB"尺寸?人们使用Lucene索引数以百万计的文档,我不认为它是您索引的问题。

您可以在具有"程序集"的文档中使用不同的值("组件")向索引添加多个字段实例。领域也是如此。


rustx:"我正在寻找一种方式来加入" Lucene使用我的外部数据源进行搜索"

如果你需要无缝的东西,你可以试试下面的框架,它就像是关系数据库和Lucene Index之间的桥梁。

Hibernate Search:在该教程中,您可以搜索" @ ManyToMany"关键字,以找到教程中的确切部分,以获得一些想法。