0

2 つのプライマリ テーブルを持つデータベースがあります。

  1. コンポーネント テーブル (50M 行)、
  2. アセンブリ テーブル (100K 行)、

..そしてそれらの間の多対多の関係 (アセンブリごとに約 100K コンポーネント)、合計 10G の関係。

特定のアセンブリのインデックスを照会できるように、コンポーネントにインデックスを付ける最良の方法は何ですか? リレーションシップの量を考えると、それらを Lucene インデックスにインポートしたくありませんが、代わりに外部テーブルとオンザフライで「結合」する方法を探しています。

4

2 に答える 2

1

Solrは複数値フィールドをサポートします。Luceneがそれらをネイティブにサポートしているかどうかはポジティブではありません。久しぶりです。エンティティの1つだけが検索可能である場合、つまりコンポーネントである場合は、「assemblies」または「assemblyIds」などのフィールドですべてのコンポーネントにインデックスを付け、アセンブリを識別するために必要なメタデータを含めます。

次に、コンポーネントを検索できます

assemblyIds:(1, 2, 3)

アセンブリ1、2、または3のコンポーネントを検索します。

于 2013-03-02T23:57:54.727 に答える
0

簡単に言うと、検索する前に、データを処理してインデックスを作成する必要があります。したがって、Lucene をデータやデータベースに「プラグイン」するだけの方法はありません。その代わりに、Lucene 自体のデータをプラグイン (処理、解析、分析、インデックス作成、およびクエリ) する必要があります。


rustyx:「私のデータはほとんど静的です。読み取り専用のインデックスを使用することもできます。」

その場合、Lucene 自体を使用できます。データソースを反復処理して、すべての多対多の関係を Lucene インデックスに追加できます。その「100GB」というサイズはどのようにして思いついたのですか? 人々は Lucene を使用して何百万ものドキュメントのインデックスを作成していますが、インデックスを作成することは問題ではないと思います。

「アセンブリ」フィールドを持つドキュメントでも、異なる値 (「コンポーネント」) を持つ複数のフィールド インスタンスをインデックスに追加できます。


rustyx:「代わりに、Lucene 検索と外部データ ソースをその場で「結合」する方法を検討しています」

シームレスなものが必要な場合は、リレーショナル データベースと Lucene Index の間のブリッジのように機能する次のフレームワークを試してみてください。

Hibernate Search : そのチュートリアルでは、「@ManyToMany」キーワードを検索して、チュートリアル内の正確なセクションを見つけて、アイデアを得ることができます。

于 2013-03-03T15:29:02.940 に答える