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% 的两倍),我想知道为什么会发生这种情况?

  • 我的对象加载线程和索引线程的比例是否错误?
  • 还是仅仅是因为索引的规模不断扩大?这是否证明了这种性能下降的合理性?
  • 如何提高性能?如何实现时间的不断进步?

因为我使用投影而不是让 Hibernate Search 从 DB 中获取搜索结果,所以我的许多索引字段都存储在 Index ( Store.YES) 中。这会显着影响性能吗?

- 编辑:

我的休眠搜索配置:

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 回答