对SearchFactory优化的Hibernate Search调用不会立即调用

维克托斯克

我正在尝试致电SearchFactory优化以运行计划的索引维护作业(压缩段-应用程序需要大量写入)。但是它似乎并没有立即调用,直到我关闭了Tomcat。我的代码就是这样调用的。

public synchronized void optimizeIndexes() {
    getFullTextEntityManager().flushToIndexes(); //apply any changes before optimizing
    getFullTextEntityManager().getSearchFactory().optimize();
    logger.info("[Lucene] optimization has performed on all the indexes...");
}
维克托斯克

我可以通过从HSearch后端借用IndexWriter来解决此问题。

private synchronized void optimizeBareMetal() {
    try {
        LuceneBackendQueueProcessor backend = (LuceneBackendQueueProcessor) getIndexManager().getBackendQueueProcessor();
        LuceneBackendResources resources = backend.getIndexResources();
        AbstractWorkspaceImpl workspace = resources.getWorkspace();
        IndexWriter indexWriter = workspace.getIndexWriter();
        indexWriter.forceMerge(1, true);
        indexWriter.commit();
    } catch (LockObtainFailedException e) {
        e.printStackTrace();
    } catch (CorruptIndexException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private synchronized DirectoryBasedIndexManager getIndexManager() {
    SearchFactoryImplementor searchFactory = (SearchFactoryImplementor) getFullTextEntityManager().getSearchFactory();
    IndexManagerHolder indexManagerHolder = searchFactory.getIndexManagerHolder();
    return (DirectoryBasedIndexManager) indexManagerHolder.getIndexManager(getEntityClass().getName());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章