我想在 Hibernate Search 中的某处注入我的代码,其中 Document 对象已完全准备好但尚未编入索引。据我所知,概念 Document 对象是由DocumentBuilderIndexedEntity类创建的。getDocument方法准备主字段(Id 和 _hibernate_class),然后调用buildDocumentFields,其中调用了 classBridge。然后它在基础级别添加所有字段(也调用 FieldBridge)并添加所有嵌入式对象,递归调用buildDocumentFields。到目前为止对我来说相当清楚。
对于所有桥梁,我逐渐填充了 Document 对象。我的目标是在提供给索引引擎之前获得最终的文档版本(从getDocument返回女巫)以进行一些计算。可能吗?最简单的方法是什么?
顺便提一句。我虽然是关于自定义 IndexManager,但对于这个简单的目的来说它似乎太复杂了......
感谢您的宝贵时间,希望您能有所帮助。
解决方案:
我最终决定实现IndexManager实现,扩展DirectoryBasedIndexManager和覆盖文档索引方法(performStreamOperation
和performOperations
)。
下面是我的代码:
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);
}
}