我正在密切关注Lucene 3.6的Lucene Tutorial。
我能够在Document
个对象上创建和执行搜索,但我想找回用于创建Document
的原始对象。不幸的是,Lucene似乎在序列化/反序列化Document
,因此我无法在它们之间创建查找映射。
如何保持Lucene的Document
和Object
之间的关系?是否有首选的Lucene方式?
我应该注意,教程对我来说没有开箱即用,我必须在创建/附加IndexWriter.commit()
之后添加对Document
的调用,我也有拨打大号IndexWriterConfig.setMaxBufferedDocs()
和IndexWriterConfig.setRAMBufferSizeMB()
来阻止Lucene查看硬盘。
答案 0 :(得分:3)
首先,您需要对原始对象的唯一引用。如果您的对象是数据库中的行,您可能会使用主键,我们假设它是唯一的ID
。
其次,在创建可搜索的Document
时,只需添加一个类似
doc.add(new Field("id", object.getId().toString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
您可以稍后从找到的文档中检索此字段,并根据ID检索原始文档(数据库条目)。
如果您可能有不同的文档类型,例如数据库条目和PDF,只需以相同的方式保存文档类型,允许您以不同的方式处理不同的类型。