2012-03-13 20 views
1

私たちは、solo上でインデックスを作成しようとしているmongoのドキュメントが何百万もあります。これを初めて行うときは、すべての文書のインデックスを作成する必要があります。solrインデックス戦略

しかし、その後、文書が変更されるときにインデックスを作成するだけでよいはずです。これを行う最善の方法は何ですか? addDocumentをコールし、次にcronコールでcommit()を呼び出す必要がありますか? addDocumentとコミットと最適化doとは何ですか(私はApache_Solr_Serviceを使用しています)

答えて

2

Solr 3.xを使用している場合は、すべてのセグメントを1つの大きなセグメントにマージするforget the optimizeを使用できます。コミットによって、新しいIndexReaderに変更が表示されます。それは高価です、私はあなたが追加する各文書のためにそれを呼ぶつもりはありません。 cronで呼び出す代わりにautocommitsolrconfig.xmlに使用します。検索中に新しい文書を取得するまでにどれくらい時間がかかっているかによって値を調整できます。

+0

文書の索引付けが必要かどうかを判断するにはどうすればよいですか?あなたはmongoドキュメントneeds_indexにフラグを設定しますか? –

+0

@ChrisMuenchええ、いい考えです。 – javanna

0

commit()を実行するまでドキュメントは実際にインデックスに追加されません。ロールバックすることができます。 optimize()は(表面的には、私はそれに特に幸運をもたらさなかった)インデックスのサイズを縮小する(インデックスが最適化されていない限り、削除されたドキュメントはまだ部屋を占有する)。

0

データベースに対して自動コミットを設定すると、自動コミット間隔が経過したときに、更新によってデータベースに追加されたすべての文書がコミットされたことを確認できます。私は5分の間隔を使用していて、5分以内に数千回の更新が発生しても正常に動作します。完全な再インデックスが完了した後、私は5分待って、それが完了したことを人々に伝えます。実際に、アップデートがdbにどのくらい迅速に入るかを尋ねると、私は毎分変更をポーリングするように言いますが、変数(突然大きなバッチなど)があり、アップデートすることを期待しないことをお勧めします5または6分間。これまでのところ、誰も実際にビジネスの必要性を主張していませんでした。

これはRAMの合計が約10Gの350,000レコードdbです。

関連する問題