1

私のアプリケーションでは、Hibernate Searchを使用して、マップされたモデル クラスの一部のLuceneインデックスを管理しています (10 個のクラスが部分的に相互に関連付けられてindexEmbeddedおり、インデックス定義にかなりの時間を費やしています)。約あります。1,500,000 ドキュメントのインデックス作成

インデックス全体を再構築するために、ドキュメント http://docs.jboss.org/hibernate/search/3.3/reference/en-US/html/manual-index-changes.htmlで提案されているように、マス インデクサーを使用します。

fullTextSession
    .createIndexer()
    .batchSizeToLoadObjects(200)
    .cacheMode(CacheMode.IGNORE)
    .purgeAllOnStart(true)
    .threadsToLoadObjects(10)
    .threadsForIndexWriter(10)
    .threadsForSubsequentFetching(5)
    .startAndWait();

データベース接続プールのサイズは 50 です

インデックス作成手順は、全ドキュメントの約 25% に達するまで、すぐに有望になることがわかりました。その後、パフォーマンスは大幅に低下します (次の 5% は最初の 25% の 2 倍の時間がかかります)。

  • オブジェクト読み込みスレッドとインデックス作成スレッドの比率が間違っていませんか?
  • それとも単にインデックスのサイズが大きくなったためですか? これは、このパフォーマンスの低下を正当化しますか?
  • パフォーマンスを向上させる方法は?時間内に一定の進歩を遂げる方法は?

Hibernate Search に DB から検索結果をフェッチさせるのではなく、プロジェクションを使用しているため、インデックス化されたフィールドの多くは Index ( Store.YES) に格納されます。これはパフォーマンスに大きな影響を与えますか?

- 編集:

私のHibernate検索構成:

properties.setProperty("hibernate.search.default.directory_provider", "filesystem");
properties.setProperty("hibernate.search.default.indexBase", searchIndexPath);
properties.setProperty("hibernate.search.indexing_strategy", "manual");
properties.setProperty("hibernate.default_batch_fetch_size", "200");
4

1 に答える 1

2

アプリケーションのプロファイルを作成しましたか。この場合、一般的な推奨事項を示すことは困難です。

また、どの構成設定を使用していますか? インデックス作成の動作に影響を与えるプロパティがいくつかあります。詳細については、 http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-batchindex-massindexerを参照してください。インデックス作成中のメモリ消費について。これも監視しましたか。

Hibernate Search に DB から検索結果を取得させるのではなく、プロジェクションを使用しているため、インデックス化されたフィールドの多くは Index (Store.YES) に格納されます。これはパフォーマンスに大きな影響を与えますか?

インデックス作成のパフォーマンスではなく、主にインデックスのサイズに影響を与えると思います。

于 2012-10-09T12:05:29.593 に答える