2013-05-21 22 views
1

我想在Hibernate Search中的某处注入我的代码,其中Document对象已完全准备,但尚未编入索引。 据我所知,概念文档对象是由DocumentBuilderIndexedEntity类创建的。方法准备主字段(Id和_hibernate_class),然后调用buildDocumentFields,其中classBridge被调用。然后它添加基准级别的所有字段(也称为FieldBridge),并添加所有embedded objects递归调用buildDocumentFields。到目前为止,我对此很清楚。如何在构建之后但编制索引之前获取org.apache.lucene.document.Document

对于所有桥梁,我逐渐填充Document对象。我的目标是在向索引引擎提供最终文档版本(从getDocument返回女巫)之前进行一些计算。可能吗?什么是最简单的方法呢?

btw。我虽然是关于自定义索引管理器,但它似乎太复杂,这个简单的目的...

感谢您的时间,并希望你的帮助。

解决方案:

我终于决定实施IndexManager实施,扩展DirectoryBasedIndexManager和overrided文件索引方法(performStreamOperationperformOperations)。

下面是我的代码:

public class SearchIndexManager extends DirectoryBasedIndexManager 
{ 
    private void processDocument(Document doc) 
    { 
     if (doc != null && doc.getFields() != null) 
     { 
      for (Fieldable field : doc.getFields()) 
       {/*my job goes here*/}; 
     } 
    } 

    @Override 
    public void performStreamOperation 
    (LuceneWork singleOperation,IndexingMonitor monitor, boolean forceAsync) 
    { 
     if (singleOperation != null) 
      processDocument(singleOperation.getDocument()); 
     super.performStreamOperation(singleOperation, monitor, forceAsync); 
    } 

    @Override 
    public void performOperations 
    (List<LuceneWork> workList,IndexingMonitor monitor) 
    { 
     for (LuceneWork lw: workList) 
     { 
      if (lw != null) 
       processDocument(lw.getDocument()); 
     } 
     super.performOperations(workList, monitor); 
    } 
} 

回答

2

与现有版本今日(4.2),这是不可能的:你可以申请一个ClassBridge编辑文档,但是这将是替代所有其他领域。

我很想加入这样的功能,并认为我们将重新设计基本上以这种晚期应用(文档施工后)的ClassBridge注释,以允许该作品中支持Lucene的4

请描述您对JIRA功能请求的期望;通常我会邀请你提出一个补丁,但在这种情况下,我们已经考虑了很多变化,所以我认为如果你能够举例说明你的用例,理想情况下用一个测试就是最好的。伪代码测试也是受欢迎的,因为它只是一个概念想法。

为了避免等待未来的版本,您确实可以使用自定义的IndexManager:它并不复杂,因为提供的扩展只是覆盖您需要的方法。或者到IndexManager您可以考虑通过扩展默认的(org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessor)实现自定义org.hibernate.search.backend.spi.BackendQueueProcessor。请记住,我们不会像其他API那样为这些类型保留向后兼容策略。

+0

最后我使用了IndexManager - 请参阅上面的编辑。请让我知道如果我错过了stg,请:) – Saram

+0

这看起来不错!我冒昧地删除了日志语句,因为这些例子并不需要它们,并且不需要初始化方法,所以也删除了它们。 – Sanne

+0

添加了https://hibernate.atlassian.net/browse/HSEARCH-1348,但不确定这是您的预期。 – Saram

相关问题